Prometheus exporter path: Metrics
" + case influxService: + servingPath = "InfluxDB push path: Push
" + } + + w.Write([]byte(`Server type` + *serveFor + `
` + servingPath + + `` + version.Info() + ` ` + version.BuildContext() + `+`)) + }) + + metrics := parseMetricList(*metricList) + histoMetrics := parseMetricList(*histoMetricList) + scraper := Scraper{address: *tinodeAddr, simpleMetrics: metrics, histogramMetrics: histoMetrics} + var serverTypeString string + // Create exporters. + switch service { + case promService: + serverTypeString = *serveFor + promExporter := NewPromExporter(*tinodeAddr, *promNamespace, time.Duration(*promTimeout)*time.Second, &scraper) + registry := prometheus.NewRegistry() + registry.MustRegister(promExporter) + http.Handle(*promMetricsPath, + promhttp.InstrumentMetricHandler( + registry, + promhttp.HandlerFor( + registry, + promhttp.HandlerOpts{ + ErrorLog: &promHTTPLogger{}, + Timeout: time.Duration(*promTimeout) * time.Second, + }, + ), + ), + ) + case influxService: + serverTypeString = fmt.Sprintf("%s, version %s", *serveFor, *influxDBVersion) + influxDBExporter := NewInfluxDBExporter(*influxDBVersion, *influxPushAddr, *influxOrganization, *influxBucket, + *influxAuthToken, *instance, &scraper) + if *influxPushInterval > 0 { + go func() { + interval := time.Duration(*influxPushInterval) * time.Second + ch := time.Tick(interval) + for { + if _, ok := <-ch; ok { + if err := influxDBExporter.Push(); err != nil { + log.Println("InfluxDB push failed:", err) + } + } else { + return + } + } + }() + } else { + log.Println("InfluxDB push interval is zero. Will not push data automatically.") + } + // Forces a data push. + http.HandleFunc("/push", func(w http.ResponseWriter, r *http.Request) { + var msg string + if err := influxDBExporter.Push(); err == nil { + msg = "HTTP 200 OK" + } else { + msg = err.Error() + } + + w.Write([]byte(`
` + msg + `+`)) + }) + } + + log.Println("Reading Tinode expvar from", *tinodeAddr) + log.Printf("Exporter running at %s. Server type %s", *listenAt, serverTypeString) + log.Fatalln(http.ListenAndServe(*listenAt, nil)) +} diff --git a/monitoring/exporter/prom_exporter.go b/monitoring/exporter/prom_exporter.go index e69de29..210030d 100644 --- a/monitoring/exporter/prom_exporter.go +++ b/monitoring/exporter/prom_exporter.go @@ -0,0 +1,330 @@ +package main + +import ( + "log" + "time" + + "github.com/prometheus/client_golang/prometheus" +) + +// PromExporter collects metrics in Prometheus format from a Tinode server. +type PromExporter struct { + address string + timeout time.Duration + namespace string + + scraper *Scraper + + up *prometheus.Desc + version *prometheus.Desc + topicsLive *prometheus.Desc + topicsTotal *prometheus.Desc + sessionsLive *prometheus.Desc + sessionsTotal *prometheus.Desc + + numGoroutines *prometheus.Desc + + incomingMessagesWebsockTotal *prometheus.Desc + outgoingMessagesWebsockTotal *prometheus.Desc + + incomingMessagesLongpollTotal *prometheus.Desc + outgoingMessagesLongpollTotal *prometheus.Desc + + incomingMessagesGrpcTotal *prometheus.Desc + outgoingMessagesGrpcTotal *prometheus.Desc + + fileDownloadsTotal *prometheus.Desc + fileUploadsTotal *prometheus.Desc + + ctrlCodesTotal2xx *prometheus.Desc + ctrlCodesTotal3xx *prometheus.Desc + ctrlCodesTotal4xx *prometheus.Desc + ctrlCodesTotal5xx *prometheus.Desc + + clusterLeader *prometheus.Desc + clusterSize *prometheus.Desc + clusterNodesLive *prometheus.Desc + malloced *prometheus.Desc + requestLatencyMsCount *prometheus.Desc + outgoingMessageBytesCount *prometheus.Desc +} + +// NewPromExporter returns an initialized Prometheus exporter. +func NewPromExporter(server, namespace string, timeout time.Duration, scraper *Scraper) *PromExporter { + return &PromExporter{ + address: server, + timeout: timeout, + namespace: namespace, + scraper: scraper, + up: prometheus.NewDesc( + prometheus.BuildFQName(namespace, "", "up"), + "If tinode instance is reachable.", + nil, + nil, + ), + version: prometheus.NewDesc( + prometheus.BuildFQName(namespace, "", "version"), + "The version of this tinode instance.", + nil, + nil, + ), + topicsLive: prometheus.NewDesc( + prometheus.BuildFQName(namespace, "", "topics_live_count"), + "Number of currently active topics.", + nil, + nil, + ), + topicsTotal: prometheus.NewDesc( + prometheus.BuildFQName(namespace, "", "topics_total"), + "Total number of topics used during instance lifetime.", + nil, + nil, + ), + sessionsLive: prometheus.NewDesc( + prometheus.BuildFQName(namespace, "", "sessions_live_count"), + "Number of currently active sessions.", + nil, + nil, + ), + sessionsTotal: prometheus.NewDesc( + prometheus.BuildFQName(namespace, "", "sessions_total"), + "Total number of sessions since instance start.", + nil, + nil, + ), + numGoroutines: prometheus.NewDesc( + prometheus.BuildFQName(namespace, "", "num_goroutines"), + "Number of currently spawned goroutines.", + nil, + nil, + ), + incomingMessagesWebsockTotal: prometheus.NewDesc( + prometheus.BuildFQName(namespace, "", "incoming_messages_websock_total"), + "Total number of incoming messages via websocket.", + nil, + nil, + ), + outgoingMessagesWebsockTotal: prometheus.NewDesc( + prometheus.BuildFQName(namespace, "", "outgoing_messages_websock_total"), + "Total number of outgoiing messages via websocket.", + nil, + nil, + ), + incomingMessagesLongpollTotal: prometheus.NewDesc( + prometheus.BuildFQName(namespace, "", "incoming_messages_longpoll_total"), + "Total number of incoming messages via longpoll.", + nil, + nil, + ), + outgoingMessagesLongpollTotal: prometheus.NewDesc( + prometheus.BuildFQName(namespace, "", "outgoing_messages_longpoll_total"), + "Total number of outgoiing messages via longpoll.", + nil, + nil, + ), + incomingMessagesGrpcTotal: prometheus.NewDesc( + prometheus.BuildFQName(namespace, "", "incoming_messages_grpc_total"), + "Total number of incoming messages via grpc.", + nil, + nil, + ), + outgoingMessagesGrpcTotal: prometheus.NewDesc( + prometheus.BuildFQName(namespace, "", "outgoing_messages_grpc_total"), + "Total number of outgoiing messages via grpc.", + nil, + nil, + ), + fileDownloadsTotal: prometheus.NewDesc( + prometheus.BuildFQName(namespace, "", "file_downloads_total"), + "Total number of large file downloads.", + nil, + nil, + ), + fileUploadsTotal: prometheus.NewDesc( + prometheus.BuildFQName(namespace, "", "file_uploads_total"), + "Total number of large file uploads.", + nil, + nil, + ), + ctrlCodesTotal2xx: prometheus.NewDesc( + prometheus.BuildFQName(namespace, "", "ctrl_codes_total_2xx"), + "Total number of 2xx ctrl response codes.", + nil, + nil, + ), + ctrlCodesTotal3xx: prometheus.NewDesc( + prometheus.BuildFQName(namespace, "", "ctrl_codes_total_3xx"), + "Total number of 3xx ctrl response codes.", + nil, + nil, + ), + ctrlCodesTotal4xx: prometheus.NewDesc( + prometheus.BuildFQName(namespace, "", "ctrl_codes_total_4xx"), + "Total number of 4xx ctrl response codes.", + nil, + nil, + ), + ctrlCodesTotal5xx: prometheus.NewDesc( + prometheus.BuildFQName(namespace, "", "ctrl_codes_total_5xx"), + "Total number of 5xx ctrl response codes.", + nil, + nil, + ), + clusterLeader: prometheus.NewDesc( + prometheus.BuildFQName(namespace, "", "cluster_leader"), + "If this cluster node is the cluster leader.", + nil, + nil, + ), + clusterSize: prometheus.NewDesc( + prometheus.BuildFQName(namespace, "", "cluster_size"), + "Configured number of cluster nodes.", + nil, + nil, + ), + clusterNodesLive: prometheus.NewDesc( + prometheus.BuildFQName(namespace, "", "cluster_nodes_live"), + "Number of cluster nodes believed to be live by the current node.", + nil, + nil, + ), + malloced: prometheus.NewDesc( + prometheus.BuildFQName(namespace, "", "malloced_bytes"), + "Number of bytes of memory allocated and in use.", + nil, + nil, + ), + requestLatencyMsCount: prometheus.NewDesc( + prometheus.BuildFQName(namespace, "", "request_latency_ms_count"), + "Request latency histogram (in ms).", + nil, + nil, + ), + outgoingMessageBytesCount: prometheus.NewDesc( + prometheus.BuildFQName(namespace, "", "outgoing_message_bytes"), + "Response size histogram (in bytes).", + nil, + nil, + ), + } +} + +// Describe describes all the metrics exported by the memcached exporter. It +// implements prometheus.Collector. +func (e *PromExporter) Describe(ch chan<- *prometheus.Desc) { + ch <- e.up + ch <- e.version + ch <- e.topicsLive + ch <- e.topicsTotal + ch <- e.sessionsLive + ch <- e.sessionsTotal + ch <- e.numGoroutines + + ch <- e.incomingMessagesWebsockTotal + ch <- e.outgoingMessagesWebsockTotal + + ch <- e.incomingMessagesLongpollTotal + ch <- e.outgoingMessagesLongpollTotal + + ch <- e.incomingMessagesGrpcTotal + ch <- e.outgoingMessagesGrpcTotal + + ch <- e.fileDownloadsTotal + ch <- e.fileUploadsTotal + + ch <- e.ctrlCodesTotal2xx + ch <- e.ctrlCodesTotal3xx + ch <- e.ctrlCodesTotal4xx + ch <- e.ctrlCodesTotal5xx + + ch <- e.clusterLeader + ch <- e.clusterSize + ch <- e.clusterNodesLive + ch <- e.malloced + + ch <- e.requestLatencyMsCount + ch <- e.outgoingMessageBytesCount +} + +// Collect fetches statistics from the configured Tinode instance, and +// delivers them as Prometheus metrics. It implements prometheus.Collector. +func (e *PromExporter) Collect(ch chan<- prometheus.Metric) { + up := float64(1) + if stats, err := e.scraper.Scrape(); err != nil { + log.Println("Failed to fetch or parse response", err) + up = 0 + } else { + if err := e.parseStats(ch, stats); err != nil { + up = 0 + } + } + + ch <- prometheus.MustNewConstMetric(e.up, prometheus.GaugeValue, up) +} + +func (e *PromExporter) parseStats(ch chan<- prometheus.Metric, stats map[string]interface{}) error { + err := firstError( + e.parseAndUpdate(ch, e.version, prometheus.GaugeValue, stats, "Version"), + e.parseAndUpdate(ch, e.topicsLive, prometheus.GaugeValue, stats, "LiveTopics"), + e.parseAndUpdate(ch, e.topicsTotal, prometheus.CounterValue, stats, "TotalTopics"), + e.parseAndUpdate(ch, e.sessionsLive, prometheus.GaugeValue, stats, "LiveSessions"), + e.parseAndUpdate(ch, e.sessionsTotal, prometheus.CounterValue, stats, "TotalSessions"), + e.parseAndUpdate(ch, e.numGoroutines, prometheus.GaugeValue, stats, "NumGoroutines"), + + e.parseAndUpdate(ch, e.incomingMessagesWebsockTotal, prometheus.CounterValue, stats, "IncomingMessagesWebsockTotal"), + e.parseAndUpdate(ch, e.outgoingMessagesWebsockTotal, prometheus.CounterValue, stats, "OutgoingMessagesWebsockTotal"), + + e.parseAndUpdate(ch, e.incomingMessagesLongpollTotal, prometheus.CounterValue, stats, "IncomingMessagesLongpollTotal"), + e.parseAndUpdate(ch, e.outgoingMessagesLongpollTotal, prometheus.CounterValue, stats, "OutgoingMessagesLongpollTotal"), + + e.parseAndUpdate(ch, e.incomingMessagesGrpcTotal, prometheus.CounterValue, stats, "IncomingMessagesGrpcTotal"), + e.parseAndUpdate(ch, e.outgoingMessagesGrpcTotal, prometheus.CounterValue, stats, "OutgoingMessagesGrpcTotal"), + + e.parseAndUpdate(ch, e.fileDownloadsTotal, prometheus.CounterValue, stats, "FileDownloadsTotal"), + e.parseAndUpdate(ch, e.fileUploadsTotal, prometheus.CounterValue, stats, "FileUploadsTotal"), + + e.parseAndUpdate(ch, e.ctrlCodesTotal2xx, prometheus.CounterValue, stats, "CtrlCodesTotal2xx"), + e.parseAndUpdate(ch, e.ctrlCodesTotal3xx, prometheus.CounterValue, stats, "CtrlCodesTotal3xx"), + e.parseAndUpdate(ch, e.ctrlCodesTotal4xx, prometheus.CounterValue, stats, "CtrlCodesTotal4xx"), + e.parseAndUpdate(ch, e.ctrlCodesTotal5xx, prometheus.CounterValue, stats, "CtrlCodesTotal5xx"), + + e.parseAndUpdate(ch, e.clusterLeader, prometheus.GaugeValue, stats, "ClusterLeader"), + e.parseAndUpdate(ch, e.clusterSize, prometheus.GaugeValue, stats, "TotalClusterNodes"), + e.parseAndUpdate(ch, e.clusterNodesLive, prometheus.GaugeValue, stats, "LiveClusterNodes"), + e.parseAndUpdate(ch, e.malloced, prometheus.GaugeValue, stats, "memstats.Alloc"), + + e.parseAndUpdateHisto(ch, e.requestLatencyMsCount, stats, "RequestLatency"), + e.parseAndUpdateHisto(ch, e.outgoingMessageBytesCount, stats, "OutgoingMessageSize"), + ) + + return err +} + +func (e *PromExporter) parseAndUpdate(ch chan<- prometheus.Metric, desc *prometheus.Desc, valueType prometheus.ValueType, + stats map[string]interface{}, key string) error { + v, err := parseNumeric(stats, key) + if err != nil { + return err + } + ch <- prometheus.MustNewConstMetric(desc, valueType, v) + return nil +} + +func (e *PromExporter) parseAndUpdateHisto(ch chan<- prometheus.Metric, desc *prometheus.Desc, + stats map[string]interface{}, key string) error { + h, err := parseHisto(stats, key) + if err != nil { + return err + } + ch <- prometheus.MustNewConstHistogram(desc, h.count, h.sum, h.buckets) + return nil +} + +func firstError(errs ...error) error { + for _, v := range errs { + if v != nil { + return v + } + } + return nil +} diff --git a/monitoring/exporter/scraper.go b/monitoring/exporter/scraper.go index e69de29..5745377 100644 --- a/monitoring/exporter/scraper.go +++ b/monitoring/exporter/scraper.go @@ -0,0 +1,166 @@ +package main + +import ( + "encoding/json" + "errors" + "log" + "net/http" + "strings" +) + +// Scraper collects metrics from a tinode server. +type Scraper struct { + // Target Tinode server address. + address string + // List of simple numeric metrics to scrape. + simpleMetrics []string + // List of histogram metrics to scrape. + histogramMetrics []string +} + +// Histogram struct. +type histogram struct { + count uint64 + sum float64 + buckets map[float64]uint64 +} + +var errKeyNotFound = errors.New("key not found") +var errMalformed = errors.New("input malformed") + +// CollectRaw gathers all metrics from the configured Tinode instance, +// and returns them as a map. +func (s *Scraper) CollectRaw() (map[string]interface{}, error) { + stats, err := s.Scrape() + if err != nil { + log.Println("Failed to fetch or parse response", err) + return nil, err + } + metrics, err := s.parseStatsRaw(stats) + if err != nil { + return nil, err + } + metrics["up"] = 1.0 + return metrics, nil +} + +// Scrape fetches the data from Tinode server using HTTP GET then decodes the response. +func (s *Scraper) Scrape() (map[string]interface{}, error) { + resp, err := http.Get(s.address) + if err != nil { + log.Println("Failed to connect to server", err) + return nil, err + } + defer resp.Body.Close() + + var stats map[string]interface{} + err = json.NewDecoder(resp.Body).Decode(&stats) + return stats, err +} + +func (s *Scraper) parseStatsRaw(stats map[string]interface{}) (map[string]interface{}, error) { + metrics := make(map[string]interface{}) + for _, key := range s.simpleMetrics { + if val, err := parseNumeric(stats, key); err == nil { + metrics[key] = val + } else { + return nil, err + } + } + for _, key := range s.histogramMetrics { + if val, err := parseHisto(stats, key); err == nil { + metrics[key] = val + } else { + return nil, err + } + } + return metrics, nil +} + +// Extracts a simple histogram from `stats` and returns a cumulative histogram +// corresponding to the simple histogram. +// Returns: (count, sum, buckets, error) tuple. +func parseHisto(stats map[string]interface{}, key string) (*histogram, error) { + // Histogram is presented as a json with the predefined fields: count, sum, count_per_bucket, bounds. + count, err := parseNumeric(stats, key+".count") + if err != nil { + return nil, err + } + sum, err := parseNumeric(stats, key+".sum") + if err != nil { + return nil, err + } + buckets, err := parseList(stats, key+".count_per_bucket") + if err != nil { + return nil, err + } + bounds, err := parseList(stats, key+".bounds") + if err != nil { + return nil, err + } + n := len(buckets) + if n != len(bounds)+1 { + return nil, errMalformed + } + result := make(map[float64]uint64) + s := uint64(0) + for i, v := range bounds { + s += uint64(buckets[i]) + result[v] = s + } + return &histogram{count: uint64(count), sum: sum, buckets: result}, nil +} + +// Extracts a list of numerics from `stats` for the given path. +func parseList(stats map[string]interface{}, path string) ([]float64, error) { + value, err := parseMetric(stats, path) + if err != nil { + return nil, err + } + listval, ok := value.([]interface{}) + if !ok { + log.Println("Value at path is not a float64 array:", path, value) + return nil, errMalformed + } + result := []float64{} + for _, v := range listval { + result = append(result, v.(float64)) + } + return result, nil +} + +// Extracts a numeric from `stats` for the given path. +func parseNumeric(stats map[string]interface{}, path string) (float64, error) { + value, err := parseMetric(stats, path) + if err != nil { + return 0, err + } + floatval, ok := value.(float64) + if !ok { + log.Println("Value at path is not a float64:", path, value) + return 0, errKeyNotFound + } + return floatval, nil +} + +// Extracts a metric from `stats` for the given path. +func parseMetric(stats map[string]interface{}, path string) (interface{}, error) { + parts := strings.Split(path, ".") + var value interface{} + var found bool + value = stats + for i := 0; i < len(parts); i++ { + subset, ok := value.(map[string]interface{}) + if !ok { + log.Println("Invalid key path:", path) + return 0, errKeyNotFound + } + value, found = subset[parts[i]] + if !found { + log.Println("Invalid key path:", path, "(", parts[i], ")") + return 0, errKeyNotFound + } + } + + return value, nil +} diff --git a/pbx/README.md b/pbx/README.md index e69de29..43d4e42 100644 --- a/pbx/README.md +++ b/pbx/README.md @@ -0,0 +1,23 @@ +# Protocol Buffer and gRPC definitions + +Definitions for Tinode [gRPC](https://grpc.io/) client and plugins. + +Tinode gRPC clients must implement rpc service `Node`, Tinode plugins `Plugin`. + +Generated `Go` and `Python` code is included. For a sample `Python` implementation of a command line client see [tn-cli](../tn-cli/). +For a partial plugin implementation see [chatbot](../chatbot/). + +If you want to make changes, you have to install protobuffers tool chain and gRPC: +``` +$ python -m pip install grpcio grpcio-tools googleapis-common-protos +``` + +To generate `Go` bindings add the following comment to your code and run `go generate` (your actual path to `/pbx` may be different): +``` +//go:generate protoc --proto_path=../pbx --go_out=plugins=grpc:../pbx ../pbx/model.proto +``` + +To generate `Python` bindings: +``` +python -m grpc_tools.protoc -I../pbx --python_out=. --grpc_python_out=. ../pbx/model.proto +``` diff --git a/pbx/go-generate.sh b/pbx/go-generate.sh old mode 100644 new mode 100755 index e69de29..a50d099 --- a/pbx/go-generate.sh +++ b/pbx/go-generate.sh @@ -0,0 +1,2 @@ +#!/bin/bash +protoc --go_out=../pbx --go_opt=paths=source_relative --go-grpc_out=../pbx --go-grpc_opt=paths=source_relative model.proto diff --git a/pbx/model.pb.go b/pbx/model.pb.go index e69de29..78e7162 100644 --- a/pbx/model.pb.go +++ b/pbx/model.pb.go @@ -0,0 +1,5846 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.1 +// protoc v7.34.1 +// source: model.proto + +package pbx + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Authentication level +type AuthLevel int32 + +const ( + AuthLevel_NONE AuthLevel = 0 + AuthLevel_ANON AuthLevel = 10 + AuthLevel_AUTH AuthLevel = 20 + AuthLevel_ROOT AuthLevel = 30 +) + +// Enum value maps for AuthLevel. +var ( + AuthLevel_name = map[int32]string{ + 0: "NONE", + 10: "ANON", + 20: "AUTH", + 30: "ROOT", + } + AuthLevel_value = map[string]int32{ + "NONE": 0, + "ANON": 10, + "AUTH": 20, + "ROOT": 30, + } +) + +func (x AuthLevel) Enum() *AuthLevel { + p := new(AuthLevel) + *p = x + return p +} + +func (x AuthLevel) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (AuthLevel) Descriptor() protoreflect.EnumDescriptor { + return file_model_proto_enumTypes[0].Descriptor() +} + +func (AuthLevel) Type() protoreflect.EnumType { + return &file_model_proto_enumTypes[0] +} + +func (x AuthLevel) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use AuthLevel.Descriptor instead. +func (AuthLevel) EnumDescriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{0} +} + +type InfoNote int32 + +const ( + // Invalid value. The name must be globally unique. + InfoNote_X1 InfoNote = 0 + InfoNote_READ InfoNote = 1 + InfoNote_RECV InfoNote = 2 + InfoNote_KP InfoNote = 3 + InfoNote_CALL InfoNote = 4 +) + +// Enum value maps for InfoNote. +var ( + InfoNote_name = map[int32]string{ + 0: "X1", + 1: "READ", + 2: "RECV", + 3: "KP", + 4: "CALL", + } + InfoNote_value = map[string]int32{ + "X1": 0, + "READ": 1, + "RECV": 2, + "KP": 3, + "CALL": 4, + } +) + +func (x InfoNote) Enum() *InfoNote { + p := new(InfoNote) + *p = x + return p +} + +func (x InfoNote) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (InfoNote) Descriptor() protoreflect.EnumDescriptor { + return file_model_proto_enumTypes[1].Descriptor() +} + +func (InfoNote) Type() protoreflect.EnumType { + return &file_model_proto_enumTypes[1] +} + +func (x InfoNote) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use InfoNote.Descriptor instead. +func (InfoNote) EnumDescriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{1} +} + +type CallEvent int32 + +const ( + // Invalid value. The name must be globally unique. + CallEvent_X2 CallEvent = 0 + CallEvent_ACCEPT CallEvent = 1 + CallEvent_ANSWER CallEvent = 2 + CallEvent_HANG_UP CallEvent = 3 + CallEvent_ICE_CANDIDATE CallEvent = 4 + CallEvent_INVITE CallEvent = 5 + CallEvent_OFFER CallEvent = 6 + CallEvent_RINGING CallEvent = 7 +) + +// Enum value maps for CallEvent. +var ( + CallEvent_name = map[int32]string{ + 0: "X2", + 1: "ACCEPT", + 2: "ANSWER", + 3: "HANG_UP", + 4: "ICE_CANDIDATE", + 5: "INVITE", + 6: "OFFER", + 7: "RINGING", + } + CallEvent_value = map[string]int32{ + "X2": 0, + "ACCEPT": 1, + "ANSWER": 2, + "HANG_UP": 3, + "ICE_CANDIDATE": 4, + "INVITE": 5, + "OFFER": 6, + "RINGING": 7, + } +) + +func (x CallEvent) Enum() *CallEvent { + p := new(CallEvent) + *p = x + return p +} + +func (x CallEvent) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (CallEvent) Descriptor() protoreflect.EnumDescriptor { + return file_model_proto_enumTypes[2].Descriptor() +} + +func (CallEvent) Type() protoreflect.EnumType { + return &file_model_proto_enumTypes[2] +} + +func (x CallEvent) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use CallEvent.Descriptor instead. +func (CallEvent) EnumDescriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{2} +} + +// Plugin response codes +type RespCode int32 + +const ( + // Instruct Tinode server to continue with default processing of the client request. + RespCode_CONTINUE RespCode = 0 + // Drop the request as if the client did not send it + RespCode_DROP RespCode = 1 + // Send the the provided srvmsg response to the client. ServerResp must contain non-zero + // srvmsg. + RespCode_RESPOND RespCode = 2 + // Replace client's original request with the provided clmsg request then continue with + // processing. ServerResp must contain non-zero clmsg. + RespCode_REPLACE RespCode = 3 +) + +// Enum value maps for RespCode. +var ( + RespCode_name = map[int32]string{ + 0: "CONTINUE", + 1: "DROP", + 2: "RESPOND", + 3: "REPLACE", + } + RespCode_value = map[string]int32{ + "CONTINUE": 0, + "DROP": 1, + "RESPOND": 2, + "REPLACE": 3, + } +) + +func (x RespCode) Enum() *RespCode { + p := new(RespCode) + *p = x + return p +} + +func (x RespCode) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (RespCode) Descriptor() protoreflect.EnumDescriptor { + return file_model_proto_enumTypes[3].Descriptor() +} + +func (RespCode) Type() protoreflect.EnumType { + return &file_model_proto_enumTypes[3] +} + +func (x RespCode) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use RespCode.Descriptor instead. +func (RespCode) EnumDescriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{3} +} + +type Crud int32 + +const ( + Crud_CREATE Crud = 0 + Crud_UPDATE Crud = 1 + Crud_DELETE Crud = 2 +) + +// Enum value maps for Crud. +var ( + Crud_name = map[int32]string{ + 0: "CREATE", + 1: "UPDATE", + 2: "DELETE", + } + Crud_value = map[string]int32{ + "CREATE": 0, + "UPDATE": 1, + "DELETE": 2, + } +) + +func (x Crud) Enum() *Crud { + p := new(Crud) + *p = x + return p +} + +func (x Crud) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Crud) Descriptor() protoreflect.EnumDescriptor { + return file_model_proto_enumTypes[4].Descriptor() +} + +func (Crud) Type() protoreflect.EnumType { + return &file_model_proto_enumTypes[4] +} + +func (x Crud) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Crud.Descriptor instead. +func (Crud) EnumDescriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{4} +} + +// What to delete, either "msg" to delete messages (default) or "topic" to delete the topic or "sub" +// to delete a subscription to topic. +type ClientDel_What int32 + +const ( + // Invalid value. The name must be globally unique. + ClientDel_X0 ClientDel_What = 0 + ClientDel_MSG ClientDel_What = 1 + ClientDel_TOPIC ClientDel_What = 2 + ClientDel_SUB ClientDel_What = 3 + ClientDel_USER ClientDel_What = 4 + ClientDel_CRED ClientDel_What = 5 +) + +// Enum value maps for ClientDel_What. +var ( + ClientDel_What_name = map[int32]string{ + 0: "X0", + 1: "MSG", + 2: "TOPIC", + 3: "SUB", + 4: "USER", + 5: "CRED", + } + ClientDel_What_value = map[string]int32{ + "X0": 0, + "MSG": 1, + "TOPIC": 2, + "SUB": 3, + "USER": 4, + "CRED": 5, + } +) + +func (x ClientDel_What) Enum() *ClientDel_What { + p := new(ClientDel_What) + *p = x + return p +} + +func (x ClientDel_What) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ClientDel_What) Descriptor() protoreflect.EnumDescriptor { + return file_model_proto_enumTypes[5].Descriptor() +} + +func (ClientDel_What) Type() protoreflect.EnumType { + return &file_model_proto_enumTypes[5] +} + +func (x ClientDel_What) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ClientDel_What.Descriptor instead. +func (ClientDel_What) EnumDescriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{18, 0} +} + +type ServerPres_What int32 + +const ( + // Invalid value. The name must be globally unique. + ServerPres_X3 ServerPres_What = 0 + ServerPres_ON ServerPres_What = 1 + ServerPres_OFF ServerPres_What = 2 + ServerPres_UA ServerPres_What = 3 + ServerPres_UPD ServerPres_What = 4 + ServerPres_GONE ServerPres_What = 5 + ServerPres_ACS ServerPres_What = 6 + ServerPres_TERM ServerPres_What = 7 + ServerPres_MSG ServerPres_What = 8 + ServerPres_READ ServerPres_What = 9 + ServerPres_RECV ServerPres_What = 10 + ServerPres_DEL ServerPres_What = 11 + ServerPres_TAGS ServerPres_What = 12 + ServerPres_AUX ServerPres_What = 13 +) + +// Enum value maps for ServerPres_What. +var ( + ServerPres_What_name = map[int32]string{ + 0: "X3", + 1: "ON", + 2: "OFF", + 3: "UA", + 4: "UPD", + 5: "GONE", + 6: "ACS", + 7: "TERM", + 8: "MSG", + 9: "READ", + 10: "RECV", + 11: "DEL", + 12: "TAGS", + 13: "AUX", + } + ServerPres_What_value = map[string]int32{ + "X3": 0, + "ON": 1, + "OFF": 2, + "UA": 3, + "UPD": 4, + "GONE": 5, + "ACS": 6, + "TERM": 7, + "MSG": 8, + "READ": 9, + "RECV": 10, + "DEL": 11, + "TAGS": 12, + "AUX": 13, + } +) + +func (x ServerPres_What) Enum() *ServerPres_What { + p := new(ServerPres_What) + *p = x + return p +} + +func (x ServerPres_What) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ServerPres_What) Descriptor() protoreflect.EnumDescriptor { + return file_model_proto_enumTypes[6].Descriptor() +} + +func (ServerPres_What) Type() protoreflect.EnumType { + return &file_model_proto_enumTypes[6] +} + +func (x ServerPres_What) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ServerPres_What.Descriptor instead. +func (ServerPres_What) EnumDescriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{28, 0} +} + +// Dummy placeholder message. +type Unused struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *Unused) Reset() { + *x = Unused{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Unused) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Unused) ProtoMessage() {} + +func (x *Unused) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Unused.ProtoReflect.Descriptor instead. +func (*Unused) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{0} +} + +// Topic default access mode +type DefaultAcsMode struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Auth string `protobuf:"bytes,1,opt,name=auth,proto3" json:"auth,omitempty"` + Anon string `protobuf:"bytes,2,opt,name=anon,proto3" json:"anon,omitempty"` +} + +func (x *DefaultAcsMode) Reset() { + *x = DefaultAcsMode{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DefaultAcsMode) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DefaultAcsMode) ProtoMessage() {} + +func (x *DefaultAcsMode) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DefaultAcsMode.ProtoReflect.Descriptor instead. +func (*DefaultAcsMode) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{1} +} + +func (x *DefaultAcsMode) GetAuth() string { + if x != nil { + return x.Auth + } + return "" +} + +func (x *DefaultAcsMode) GetAnon() string { + if x != nil { + return x.Anon + } + return "" +} + +// Actual access mode +type AccessMode struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Access mode requested by the user + Want string `protobuf:"bytes,1,opt,name=want,proto3" json:"want,omitempty"` + // Access mode granted to the user by the admin + Given string `protobuf:"bytes,2,opt,name=given,proto3" json:"given,omitempty"` +} + +func (x *AccessMode) Reset() { + *x = AccessMode{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AccessMode) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AccessMode) ProtoMessage() {} + +func (x *AccessMode) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AccessMode.ProtoReflect.Descriptor instead. +func (*AccessMode) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{2} +} + +func (x *AccessMode) GetWant() string { + if x != nil { + return x.Want + } + return "" +} + +func (x *AccessMode) GetGiven() string { + if x != nil { + return x.Given + } + return "" +} + +// SetSub: payload in set.sub request to update current subscription or invite another user, {sub.what} == "sub" +type SetSub struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // User affected by this request. Default (empty): current user + UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + // Access mode change, either Given or Want depending on context + Mode string `protobuf:"bytes,2,opt,name=mode,proto3" json:"mode,omitempty"` +} + +func (x *SetSub) Reset() { + *x = SetSub{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SetSub) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SetSub) ProtoMessage() {} + +func (x *SetSub) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SetSub.ProtoReflect.Descriptor instead. +func (*SetSub) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{3} +} + +func (x *SetSub) GetUserId() string { + if x != nil { + return x.UserId + } + return "" +} + +func (x *SetSub) GetMode() string { + if x != nil { + return x.Mode + } + return "" +} + +// Credentials such as email or phone number +type ClientCred struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Credential type, i.e. `email` or `tel`. + Method string `protobuf:"bytes,1,opt,name=method,proto3" json:"method,omitempty"` + // Value to verify, i.e. `user@example.com` or `+18003287448` + Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` + // Verification response + Response string `protobuf:"bytes,3,opt,name=response,proto3" json:"response,omitempty"` + // Request parameters, such as preferences or country code. + Params map[string][]byte `protobuf:"bytes,4,rep,name=params,proto3" json:"params,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *ClientCred) Reset() { + *x = ClientCred{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClientCred) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClientCred) ProtoMessage() {} + +func (x *ClientCred) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClientCred.ProtoReflect.Descriptor instead. +func (*ClientCred) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{4} +} + +func (x *ClientCred) GetMethod() string { + if x != nil { + return x.Method + } + return "" +} + +func (x *ClientCred) GetValue() string { + if x != nil { + return x.Value + } + return "" +} + +func (x *ClientCred) GetResponse() string { + if x != nil { + return x.Response + } + return "" +} + +func (x *ClientCred) GetParams() map[string][]byte { + if x != nil { + return x.Params + } + return nil +} + +// SetDesc: C2S in set.what == "desc" and sub.init message +type SetDesc struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + DefaultAcs *DefaultAcsMode `protobuf:"bytes,1,opt,name=default_acs,json=defaultAcs,proto3" json:"default_acs,omitempty"` + Public []byte `protobuf:"bytes,2,opt,name=public,proto3" json:"public,omitempty"` + Private []byte `protobuf:"bytes,3,opt,name=private,proto3" json:"private,omitempty"` + Trusted []byte `protobuf:"bytes,4,opt,name=trusted,proto3" json:"trusted,omitempty"` +} + +func (x *SetDesc) Reset() { + *x = SetDesc{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SetDesc) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SetDesc) ProtoMessage() {} + +func (x *SetDesc) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SetDesc.ProtoReflect.Descriptor instead. +func (*SetDesc) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{5} +} + +func (x *SetDesc) GetDefaultAcs() *DefaultAcsMode { + if x != nil { + return x.DefaultAcs + } + return nil +} + +func (x *SetDesc) GetPublic() []byte { + if x != nil { + return x.Public + } + return nil +} + +func (x *SetDesc) GetPrivate() []byte { + if x != nil { + return x.Private + } + return nil +} + +func (x *SetDesc) GetTrusted() []byte { + if x != nil { + return x.Trusted + } + return nil +} + +type SeqRange struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Low int32 `protobuf:"varint,1,opt,name=low,proto3" json:"low,omitempty"` + Hi int32 `protobuf:"varint,2,opt,name=hi,proto3" json:"hi,omitempty"` +} + +func (x *SeqRange) Reset() { + *x = SeqRange{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SeqRange) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SeqRange) ProtoMessage() {} + +func (x *SeqRange) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SeqRange.ProtoReflect.Descriptor instead. +func (*SeqRange) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{6} +} + +func (x *SeqRange) GetLow() int32 { + if x != nil { + return x.Low + } + return 0 +} + +func (x *SeqRange) GetHi() int32 { + if x != nil { + return x.Hi + } + return 0 +} + +type GetOpts struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Timestamp in milliseconds since epoch 01/01/1970 + IfModifiedSince int64 `protobuf:"varint,1,opt,name=if_modified_since,json=ifModifiedSince,proto3" json:"if_modified_since,omitempty"` + // Limit search to this user ID + User string `protobuf:"bytes,2,opt,name=user,proto3" json:"user,omitempty"` + // Limit search results to one topic; + Topic string `protobuf:"bytes,3,opt,name=topic,proto3" json:"topic,omitempty"` + // Load messages with seq id equal or greater than this + SinceId int32 `protobuf:"varint,4,opt,name=since_id,json=sinceId,proto3" json:"since_id,omitempty"` + // Load messages with seq id lower than this + BeforeId int32 `protobuf:"varint,5,opt,name=before_id,json=beforeId,proto3" json:"before_id,omitempty"` + // Maximum number of results to return + Limit int32 `protobuf:"varint,6,opt,name=limit,proto3" json:"limit,omitempty"` + // Load messages by id or ranges of ids + Ranges []*SeqRange `protobuf:"bytes,7,rep,name=ranges,proto3" json:"ranges,omitempty"` +} + +func (x *GetOpts) Reset() { + *x = GetOpts{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetOpts) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetOpts) ProtoMessage() {} + +func (x *GetOpts) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetOpts.ProtoReflect.Descriptor instead. +func (*GetOpts) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{7} +} + +func (x *GetOpts) GetIfModifiedSince() int64 { + if x != nil { + return x.IfModifiedSince + } + return 0 +} + +func (x *GetOpts) GetUser() string { + if x != nil { + return x.User + } + return "" +} + +func (x *GetOpts) GetTopic() string { + if x != nil { + return x.Topic + } + return "" +} + +func (x *GetOpts) GetSinceId() int32 { + if x != nil { + return x.SinceId + } + return 0 +} + +func (x *GetOpts) GetBeforeId() int32 { + if x != nil { + return x.BeforeId + } + return 0 +} + +func (x *GetOpts) GetLimit() int32 { + if x != nil { + return x.Limit + } + return 0 +} + +func (x *GetOpts) GetRanges() []*SeqRange { + if x != nil { + return x.Ranges + } + return nil +} + +type GetQuery struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + What string `protobuf:"bytes,1,opt,name=what,proto3" json:"what,omitempty"` + // Parameters of "desc" request + Desc *GetOpts `protobuf:"bytes,2,opt,name=desc,proto3" json:"desc,omitempty"` + // Parameters of "sub" request + Sub *GetOpts `protobuf:"bytes,3,opt,name=sub,proto3" json:"sub,omitempty"` + // Parameters of "data" request + Data *GetOpts `protobuf:"bytes,4,opt,name=data,proto3" json:"data,omitempty"` +} + +func (x *GetQuery) Reset() { + *x = GetQuery{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetQuery) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetQuery) ProtoMessage() {} + +func (x *GetQuery) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetQuery.ProtoReflect.Descriptor instead. +func (*GetQuery) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{8} +} + +func (x *GetQuery) GetWhat() string { + if x != nil { + return x.What + } + return "" +} + +func (x *GetQuery) GetDesc() *GetOpts { + if x != nil { + return x.Desc + } + return nil +} + +func (x *GetQuery) GetSub() *GetOpts { + if x != nil { + return x.Sub + } + return nil +} + +func (x *GetQuery) GetData() *GetOpts { + if x != nil { + return x.Data + } + return nil +} + +type SetQuery struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Topic metadata, new topic & new subscriptions only + Desc *SetDesc `protobuf:"bytes,1,opt,name=desc,proto3" json:"desc,omitempty"` + // Subscription parameters + Sub *SetSub `protobuf:"bytes,2,opt,name=sub,proto3" json:"sub,omitempty"` + // Indexable tags + Tags []string `protobuf:"bytes,3,rep,name=tags,proto3" json:"tags,omitempty"` + // Credential being updated. + Cred *ClientCred `protobuf:"bytes,4,opt,name=cred,proto3" json:"cred,omitempty"` + // Auxiliary data. + Aux map[string][]byte `protobuf:"bytes,5,rep,name=aux,proto3" json:"aux,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *SetQuery) Reset() { + *x = SetQuery{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SetQuery) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SetQuery) ProtoMessage() {} + +func (x *SetQuery) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SetQuery.ProtoReflect.Descriptor instead. +func (*SetQuery) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{9} +} + +func (x *SetQuery) GetDesc() *SetDesc { + if x != nil { + return x.Desc + } + return nil +} + +func (x *SetQuery) GetSub() *SetSub { + if x != nil { + return x.Sub + } + return nil +} + +func (x *SetQuery) GetTags() []string { + if x != nil { + return x.Tags + } + return nil +} + +func (x *SetQuery) GetCred() *ClientCred { + if x != nil { + return x.Cred + } + return nil +} + +func (x *SetQuery) GetAux() map[string][]byte { + if x != nil { + return x.Aux + } + return nil +} + +// Client handshake +type ClientHi struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + UserAgent string `protobuf:"bytes,2,opt,name=user_agent,json=userAgent,proto3" json:"user_agent,omitempty"` + Ver string `protobuf:"bytes,3,opt,name=ver,proto3" json:"ver,omitempty"` + DeviceId string `protobuf:"bytes,4,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + Lang string `protobuf:"bytes,5,opt,name=lang,proto3" json:"lang,omitempty"` + Platform string `protobuf:"bytes,6,opt,name=platform,proto3" json:"platform,omitempty"` + Background bool `protobuf:"varint,7,opt,name=background,proto3" json:"background,omitempty"` + Tenant string `protobuf:"bytes,8,opt,name=tenant,proto3" json:"tenant,omitempty"` +} + +func (x *ClientHi) Reset() { + *x = ClientHi{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClientHi) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClientHi) ProtoMessage() {} + +func (x *ClientHi) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClientHi.ProtoReflect.Descriptor instead. +func (*ClientHi) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{10} +} + +func (x *ClientHi) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *ClientHi) GetUserAgent() string { + if x != nil { + return x.UserAgent + } + return "" +} + +func (x *ClientHi) GetVer() string { + if x != nil { + return x.Ver + } + return "" +} + +func (x *ClientHi) GetDeviceId() string { + if x != nil { + return x.DeviceId + } + return "" +} + +func (x *ClientHi) GetLang() string { + if x != nil { + return x.Lang + } + return "" +} + +func (x *ClientHi) GetPlatform() string { + if x != nil { + return x.Platform + } + return "" +} + +func (x *ClientHi) GetBackground() bool { + if x != nil { + return x.Background + } + return false +} + +func (x *ClientHi) GetTenant() string { + if x != nil { + return x.Tenant + } + return "" +} + +// User creation message {acc} +type ClientAcc struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // User being created or updated + UserId string `protobuf:"bytes,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + // The initial authentication scheme the account can use + Scheme string `protobuf:"bytes,3,opt,name=scheme,proto3" json:"scheme,omitempty"` + // Shared secret + Secret []byte `protobuf:"bytes,4,opt,name=secret,proto3" json:"secret,omitempty"` + // Authenticate session with the newly created account + Login bool `protobuf:"varint,5,opt,name=login,proto3" json:"login,omitempty"` + // Indexable tags for user discovery + Tags []string `protobuf:"bytes,6,rep,name=tags,proto3" json:"tags,omitempty"` + // User initialization data when creating a new user, otherwise ignored + Desc *SetDesc `protobuf:"bytes,7,opt,name=desc,proto3" json:"desc,omitempty"` + // Credentials for verification. + Cred []*ClientCred `protobuf:"bytes,8,rep,name=cred,proto3" json:"cred,omitempty"` + // Authentication token used for resetting a password. + Token []byte `protobuf:"bytes,9,opt,name=token,proto3" json:"token,omitempty"` + // Account state: normal ("ok"), suspended + State string `protobuf:"bytes,10,opt,name=state,proto3" json:"state,omitempty"` + // AuthLevel + AuthLevel AuthLevel `protobuf:"varint,11,opt,name=auth_level,json=authLevel,proto3,enum=pbx.AuthLevel" json:"auth_level,omitempty"` + // Temporary auth params for one-off actions like password reset. + TmpScheme string `protobuf:"bytes,12,opt,name=tmp_scheme,json=tmpScheme,proto3" json:"tmp_scheme,omitempty"` + TmpSecret []byte `protobuf:"bytes,13,opt,name=tmp_secret,json=tmpSecret,proto3" json:"tmp_secret,omitempty"` +} + +func (x *ClientAcc) Reset() { + *x = ClientAcc{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClientAcc) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClientAcc) ProtoMessage() {} + +func (x *ClientAcc) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClientAcc.ProtoReflect.Descriptor instead. +func (*ClientAcc) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{11} +} + +func (x *ClientAcc) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *ClientAcc) GetUserId() string { + if x != nil { + return x.UserId + } + return "" +} + +func (x *ClientAcc) GetScheme() string { + if x != nil { + return x.Scheme + } + return "" +} + +func (x *ClientAcc) GetSecret() []byte { + if x != nil { + return x.Secret + } + return nil +} + +func (x *ClientAcc) GetLogin() bool { + if x != nil { + return x.Login + } + return false +} + +func (x *ClientAcc) GetTags() []string { + if x != nil { + return x.Tags + } + return nil +} + +func (x *ClientAcc) GetDesc() *SetDesc { + if x != nil { + return x.Desc + } + return nil +} + +func (x *ClientAcc) GetCred() []*ClientCred { + if x != nil { + return x.Cred + } + return nil +} + +func (x *ClientAcc) GetToken() []byte { + if x != nil { + return x.Token + } + return nil +} + +func (x *ClientAcc) GetState() string { + if x != nil { + return x.State + } + return "" +} + +func (x *ClientAcc) GetAuthLevel() AuthLevel { + if x != nil { + return x.AuthLevel + } + return AuthLevel_NONE +} + +func (x *ClientAcc) GetTmpScheme() string { + if x != nil { + return x.TmpScheme + } + return "" +} + +func (x *ClientAcc) GetTmpSecret() []byte { + if x != nil { + return x.TmpSecret + } + return nil +} + +// Login {login} message +type ClientLogin struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Authentication scheme + Scheme string `protobuf:"bytes,2,opt,name=scheme,proto3" json:"scheme,omitempty"` + // Shared secret + Secret []byte `protobuf:"bytes,3,opt,name=secret,proto3" json:"secret,omitempty"` + // Credentials for verification. + Cred []*ClientCred `protobuf:"bytes,4,rep,name=cred,proto3" json:"cred,omitempty"` +} + +func (x *ClientLogin) Reset() { + *x = ClientLogin{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClientLogin) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClientLogin) ProtoMessage() {} + +func (x *ClientLogin) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClientLogin.ProtoReflect.Descriptor instead. +func (*ClientLogin) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{12} +} + +func (x *ClientLogin) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *ClientLogin) GetScheme() string { + if x != nil { + return x.Scheme + } + return "" +} + +func (x *ClientLogin) GetSecret() []byte { + if x != nil { + return x.Secret + } + return nil +} + +func (x *ClientLogin) GetCred() []*ClientCred { + if x != nil { + return x.Cred + } + return nil +} + +// Subscription request {sub} message +type ClientSub struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Topic string `protobuf:"bytes,2,opt,name=topic,proto3" json:"topic,omitempty"` + // mirrors {set} + SetQuery *SetQuery `protobuf:"bytes,3,opt,name=set_query,json=setQuery,proto3" json:"set_query,omitempty"` + // mirrors {get} + GetQuery *GetQuery `protobuf:"bytes,4,opt,name=get_query,json=getQuery,proto3" json:"get_query,omitempty"` +} + +func (x *ClientSub) Reset() { + *x = ClientSub{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClientSub) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClientSub) ProtoMessage() {} + +func (x *ClientSub) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClientSub.ProtoReflect.Descriptor instead. +func (*ClientSub) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{13} +} + +func (x *ClientSub) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *ClientSub) GetTopic() string { + if x != nil { + return x.Topic + } + return "" +} + +func (x *ClientSub) GetSetQuery() *SetQuery { + if x != nil { + return x.SetQuery + } + return nil +} + +func (x *ClientSub) GetGetQuery() *GetQuery { + if x != nil { + return x.GetQuery + } + return nil +} + +// Unsubscribe {leave} request message +type ClientLeave struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Topic string `protobuf:"bytes,2,opt,name=topic,proto3" json:"topic,omitempty"` + Unsub bool `protobuf:"varint,3,opt,name=unsub,proto3" json:"unsub,omitempty"` +} + +func (x *ClientLeave) Reset() { + *x = ClientLeave{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClientLeave) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClientLeave) ProtoMessage() {} + +func (x *ClientLeave) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClientLeave.ProtoReflect.Descriptor instead. +func (*ClientLeave) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{14} +} + +func (x *ClientLeave) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *ClientLeave) GetTopic() string { + if x != nil { + return x.Topic + } + return "" +} + +func (x *ClientLeave) GetUnsub() bool { + if x != nil { + return x.Unsub + } + return false +} + +// ClientPub is client's request to publish data to topic subscribers {pub} +type ClientPub struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Topic string `protobuf:"bytes,2,opt,name=topic,proto3" json:"topic,omitempty"` + NoEcho bool `protobuf:"varint,3,opt,name=no_echo,json=noEcho,proto3" json:"no_echo,omitempty"` + Head map[string][]byte `protobuf:"bytes,4,rep,name=head,proto3" json:"head,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Content []byte `protobuf:"bytes,5,opt,name=content,proto3" json:"content,omitempty"` +} + +func (x *ClientPub) Reset() { + *x = ClientPub{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClientPub) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClientPub) ProtoMessage() {} + +func (x *ClientPub) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClientPub.ProtoReflect.Descriptor instead. +func (*ClientPub) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{15} +} + +func (x *ClientPub) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *ClientPub) GetTopic() string { + if x != nil { + return x.Topic + } + return "" +} + +func (x *ClientPub) GetNoEcho() bool { + if x != nil { + return x.NoEcho + } + return false +} + +func (x *ClientPub) GetHead() map[string][]byte { + if x != nil { + return x.Head + } + return nil +} + +func (x *ClientPub) GetContent() []byte { + if x != nil { + return x.Content + } + return nil +} + +// Query topic state {get} +type ClientGet struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Topic string `protobuf:"bytes,2,opt,name=topic,proto3" json:"topic,omitempty"` + Query *GetQuery `protobuf:"bytes,3,opt,name=query,proto3" json:"query,omitempty"` +} + +func (x *ClientGet) Reset() { + *x = ClientGet{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClientGet) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClientGet) ProtoMessage() {} + +func (x *ClientGet) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[16] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClientGet.ProtoReflect.Descriptor instead. +func (*ClientGet) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{16} +} + +func (x *ClientGet) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *ClientGet) GetTopic() string { + if x != nil { + return x.Topic + } + return "" +} + +func (x *ClientGet) GetQuery() *GetQuery { + if x != nil { + return x.Query + } + return nil +} + +// Update topic state {set} +type ClientSet struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Topic string `protobuf:"bytes,2,opt,name=topic,proto3" json:"topic,omitempty"` + Query *SetQuery `protobuf:"bytes,3,opt,name=query,proto3" json:"query,omitempty"` +} + +func (x *ClientSet) Reset() { + *x = ClientSet{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClientSet) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClientSet) ProtoMessage() {} + +func (x *ClientSet) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClientSet.ProtoReflect.Descriptor instead. +func (*ClientSet) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{17} +} + +func (x *ClientSet) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *ClientSet) GetTopic() string { + if x != nil { + return x.Topic + } + return "" +} + +func (x *ClientSet) GetQuery() *SetQuery { + if x != nil { + return x.Query + } + return nil +} + +// ClientDel delete messages or topic +type ClientDel struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Topic string `protobuf:"bytes,2,opt,name=topic,proto3" json:"topic,omitempty"` + What ClientDel_What `protobuf:"varint,3,opt,name=what,proto3,enum=pbx.ClientDel_What" json:"what,omitempty"` + // Delete messages by id or range of ids + DelSeq []*SeqRange `protobuf:"bytes,4,rep,name=del_seq,json=delSeq,proto3" json:"del_seq,omitempty"` + // User ID of the subscription to delete + UserId string `protobuf:"bytes,5,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + // Credential to delete. + Cred *ClientCred `protobuf:"bytes,6,opt,name=cred,proto3" json:"cred,omitempty"` + // Request to hard-delete messages for all users, if such option is available. + Hard bool `protobuf:"varint,7,opt,name=hard,proto3" json:"hard,omitempty"` +} + +func (x *ClientDel) Reset() { + *x = ClientDel{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClientDel) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClientDel) ProtoMessage() {} + +func (x *ClientDel) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClientDel.ProtoReflect.Descriptor instead. +func (*ClientDel) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{18} +} + +func (x *ClientDel) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *ClientDel) GetTopic() string { + if x != nil { + return x.Topic + } + return "" +} + +func (x *ClientDel) GetWhat() ClientDel_What { + if x != nil { + return x.What + } + return ClientDel_X0 +} + +func (x *ClientDel) GetDelSeq() []*SeqRange { + if x != nil { + return x.DelSeq + } + return nil +} + +func (x *ClientDel) GetUserId() string { + if x != nil { + return x.UserId + } + return "" +} + +func (x *ClientDel) GetCred() *ClientCred { + if x != nil { + return x.Cred + } + return nil +} + +func (x *ClientDel) GetHard() bool { + if x != nil { + return x.Hard + } + return false +} + +// ClientNote is a client-generated notification for topic subscribers +type ClientNote struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Topic string `protobuf:"bytes,1,opt,name=topic,proto3" json:"topic,omitempty"` + // what is being reported: "recv" - message received, "read" - message read, + // "kp" - typing notification, "call" - voice/video call + What InfoNote `protobuf:"varint,2,opt,name=what,proto3,enum=pbx.InfoNote" json:"what,omitempty"` + // Server-issued message ID being reported + SeqId int32 `protobuf:"varint,3,opt,name=seq_id,json=seqId,proto3" json:"seq_id,omitempty"` + // Client's count of unread messages to report back to the server. Used in push notifications on iOS. + Unread int32 `protobuf:"varint,4,opt,name=unread,proto3" json:"unread,omitempty"` + // Call event. + Event CallEvent `protobuf:"varint,5,opt,name=event,proto3,enum=pbx.CallEvent" json:"event,omitempty"` + // Arbitrary json payload (used in video calls). + Payload []byte `protobuf:"bytes,6,opt,name=payload,proto3" json:"payload,omitempty"` +} + +func (x *ClientNote) Reset() { + *x = ClientNote{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClientNote) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClientNote) ProtoMessage() {} + +func (x *ClientNote) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[19] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClientNote.ProtoReflect.Descriptor instead. +func (*ClientNote) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{19} +} + +func (x *ClientNote) GetTopic() string { + if x != nil { + return x.Topic + } + return "" +} + +func (x *ClientNote) GetWhat() InfoNote { + if x != nil { + return x.What + } + return InfoNote_X1 +} + +func (x *ClientNote) GetSeqId() int32 { + if x != nil { + return x.SeqId + } + return 0 +} + +func (x *ClientNote) GetUnread() int32 { + if x != nil { + return x.Unread + } + return 0 +} + +func (x *ClientNote) GetEvent() CallEvent { + if x != nil { + return x.Event + } + return CallEvent_X2 +} + +func (x *ClientNote) GetPayload() []byte { + if x != nil { + return x.Payload + } + return nil +} + +type ClientExtra struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Attachments []string `protobuf:"bytes,1,rep,name=attachments,proto3" json:"attachments,omitempty"` + // Root user may send messages on behalf of other users. + OnBehalfOf string `protobuf:"bytes,2,opt,name=on_behalf_of,json=onBehalfOf,proto3" json:"on_behalf_of,omitempty"` + AuthLevel AuthLevel `protobuf:"varint,3,opt,name=auth_level,json=authLevel,proto3,enum=pbx.AuthLevel" json:"auth_level,omitempty"` +} + +func (x *ClientExtra) Reset() { + *x = ClientExtra{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClientExtra) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClientExtra) ProtoMessage() {} + +func (x *ClientExtra) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[20] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClientExtra.ProtoReflect.Descriptor instead. +func (*ClientExtra) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{20} +} + +func (x *ClientExtra) GetAttachments() []string { + if x != nil { + return x.Attachments + } + return nil +} + +func (x *ClientExtra) GetOnBehalfOf() string { + if x != nil { + return x.OnBehalfOf + } + return "" +} + +func (x *ClientExtra) GetAuthLevel() AuthLevel { + if x != nil { + return x.AuthLevel + } + return AuthLevel_NONE +} + +type ClientMsg struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Message: + // + // *ClientMsg_Hi + // *ClientMsg_Acc + // *ClientMsg_Login + // *ClientMsg_Sub + // *ClientMsg_Leave + // *ClientMsg_Pub + // *ClientMsg_Get + // *ClientMsg_Set + // *ClientMsg_Del + // *ClientMsg_Note + Message isClientMsg_Message `protobuf_oneof:"Message"` + // Additional message parameters. + Extra *ClientExtra `protobuf:"bytes,13,opt,name=extra,proto3" json:"extra,omitempty"` +} + +func (x *ClientMsg) Reset() { + *x = ClientMsg{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClientMsg) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClientMsg) ProtoMessage() {} + +func (x *ClientMsg) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[21] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClientMsg.ProtoReflect.Descriptor instead. +func (*ClientMsg) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{21} +} + +func (m *ClientMsg) GetMessage() isClientMsg_Message { + if m != nil { + return m.Message + } + return nil +} + +func (x *ClientMsg) GetHi() *ClientHi { + if x, ok := x.GetMessage().(*ClientMsg_Hi); ok { + return x.Hi + } + return nil +} + +func (x *ClientMsg) GetAcc() *ClientAcc { + if x, ok := x.GetMessage().(*ClientMsg_Acc); ok { + return x.Acc + } + return nil +} + +func (x *ClientMsg) GetLogin() *ClientLogin { + if x, ok := x.GetMessage().(*ClientMsg_Login); ok { + return x.Login + } + return nil +} + +func (x *ClientMsg) GetSub() *ClientSub { + if x, ok := x.GetMessage().(*ClientMsg_Sub); ok { + return x.Sub + } + return nil +} + +func (x *ClientMsg) GetLeave() *ClientLeave { + if x, ok := x.GetMessage().(*ClientMsg_Leave); ok { + return x.Leave + } + return nil +} + +func (x *ClientMsg) GetPub() *ClientPub { + if x, ok := x.GetMessage().(*ClientMsg_Pub); ok { + return x.Pub + } + return nil +} + +func (x *ClientMsg) GetGet() *ClientGet { + if x, ok := x.GetMessage().(*ClientMsg_Get); ok { + return x.Get + } + return nil +} + +func (x *ClientMsg) GetSet() *ClientSet { + if x, ok := x.GetMessage().(*ClientMsg_Set); ok { + return x.Set + } + return nil +} + +func (x *ClientMsg) GetDel() *ClientDel { + if x, ok := x.GetMessage().(*ClientMsg_Del); ok { + return x.Del + } + return nil +} + +func (x *ClientMsg) GetNote() *ClientNote { + if x, ok := x.GetMessage().(*ClientMsg_Note); ok { + return x.Note + } + return nil +} + +func (x *ClientMsg) GetExtra() *ClientExtra { + if x != nil { + return x.Extra + } + return nil +} + +type isClientMsg_Message interface { + isClientMsg_Message() +} + +type ClientMsg_Hi struct { + Hi *ClientHi `protobuf:"bytes,1,opt,name=hi,proto3,oneof"` +} + +type ClientMsg_Acc struct { + Acc *ClientAcc `protobuf:"bytes,2,opt,name=acc,proto3,oneof"` +} + +type ClientMsg_Login struct { + Login *ClientLogin `protobuf:"bytes,3,opt,name=login,proto3,oneof"` +} + +type ClientMsg_Sub struct { + Sub *ClientSub `protobuf:"bytes,4,opt,name=sub,proto3,oneof"` +} + +type ClientMsg_Leave struct { + Leave *ClientLeave `protobuf:"bytes,5,opt,name=leave,proto3,oneof"` +} + +type ClientMsg_Pub struct { + Pub *ClientPub `protobuf:"bytes,6,opt,name=pub,proto3,oneof"` +} + +type ClientMsg_Get struct { + Get *ClientGet `protobuf:"bytes,7,opt,name=get,proto3,oneof"` +} + +type ClientMsg_Set struct { + Set *ClientSet `protobuf:"bytes,8,opt,name=set,proto3,oneof"` +} + +type ClientMsg_Del struct { + Del *ClientDel `protobuf:"bytes,9,opt,name=del,proto3,oneof"` +} + +type ClientMsg_Note struct { + Note *ClientNote `protobuf:"bytes,10,opt,name=note,proto3,oneof"` +} + +func (*ClientMsg_Hi) isClientMsg_Message() {} + +func (*ClientMsg_Acc) isClientMsg_Message() {} + +func (*ClientMsg_Login) isClientMsg_Message() {} + +func (*ClientMsg_Sub) isClientMsg_Message() {} + +func (*ClientMsg_Leave) isClientMsg_Message() {} + +func (*ClientMsg_Pub) isClientMsg_Message() {} + +func (*ClientMsg_Get) isClientMsg_Message() {} + +func (*ClientMsg_Set) isClientMsg_Message() {} + +func (*ClientMsg_Del) isClientMsg_Message() {} + +func (*ClientMsg_Note) isClientMsg_Message() {} + +// Credentials +type ServerCred struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Credential type, i.e. `email` or `tel`. + Method string `protobuf:"bytes,1,opt,name=method,proto3" json:"method,omitempty"` + // Value to verify, i.e. `user@example.com` or `+18003287448` + Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` + // Indicator that the credential is validated + Done bool `protobuf:"varint,3,opt,name=done,proto3" json:"done,omitempty"` +} + +func (x *ServerCred) Reset() { + *x = ServerCred{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ServerCred) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ServerCred) ProtoMessage() {} + +func (x *ServerCred) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[22] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ServerCred.ProtoReflect.Descriptor instead. +func (*ServerCred) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{22} +} + +func (x *ServerCred) GetMethod() string { + if x != nil { + return x.Method + } + return "" +} + +func (x *ServerCred) GetValue() string { + if x != nil { + return x.Value + } + return "" +} + +func (x *ServerCred) GetDone() bool { + if x != nil { + return x.Done + } + return false +} + +// Topic description, S2C in Meta message +type TopicDesc struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + CreatedAt int64 `protobuf:"varint,1,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` + UpdatedAt int64 `protobuf:"varint,2,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` + TouchedAt int64 `protobuf:"varint,3,opt,name=touched_at,json=touchedAt,proto3" json:"touched_at,omitempty"` + Defacs *DefaultAcsMode `protobuf:"bytes,4,opt,name=defacs,proto3" json:"defacs,omitempty"` + Acs *AccessMode `protobuf:"bytes,5,opt,name=acs,proto3" json:"acs,omitempty"` + SeqId int32 `protobuf:"varint,6,opt,name=seq_id,json=seqId,proto3" json:"seq_id,omitempty"` + ReadId int32 `protobuf:"varint,7,opt,name=read_id,json=readId,proto3" json:"read_id,omitempty"` + RecvId int32 `protobuf:"varint,8,opt,name=recv_id,json=recvId,proto3" json:"recv_id,omitempty"` + DelId int32 `protobuf:"varint,9,opt,name=del_id,json=delId,proto3" json:"del_id,omitempty"` + Public []byte `protobuf:"bytes,10,opt,name=public,proto3" json:"public,omitempty"` + Private []byte `protobuf:"bytes,11,opt,name=private,proto3" json:"private,omitempty"` + State string `protobuf:"bytes,12,opt,name=state,proto3" json:"state,omitempty"` + StateAt int64 `protobuf:"varint,13,opt,name=state_at,json=stateAt,proto3" json:"state_at,omitempty"` + Trusted []byte `protobuf:"bytes,14,opt,name=trusted,proto3" json:"trusted,omitempty"` + IsChan bool `protobuf:"varint,17,opt,name=is_chan,json=isChan,proto3" json:"is_chan,omitempty"` // 17! + Online bool `protobuf:"varint,18,opt,name=online,proto3" json:"online,omitempty"` + // P2P only: other user's last online timestamp & user agent + LastSeenTime int64 `protobuf:"varint,15,opt,name=last_seen_time,json=lastSeenTime,proto3" json:"last_seen_time,omitempty"` + LastSeenUserAgent string `protobuf:"bytes,16,opt,name=last_seen_user_agent,json=lastSeenUserAgent,proto3" json:"last_seen_user_agent,omitempty"` +} + +func (x *TopicDesc) Reset() { + *x = TopicDesc{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TopicDesc) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TopicDesc) ProtoMessage() {} + +func (x *TopicDesc) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[23] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TopicDesc.ProtoReflect.Descriptor instead. +func (*TopicDesc) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{23} +} + +func (x *TopicDesc) GetCreatedAt() int64 { + if x != nil { + return x.CreatedAt + } + return 0 +} + +func (x *TopicDesc) GetUpdatedAt() int64 { + if x != nil { + return x.UpdatedAt + } + return 0 +} + +func (x *TopicDesc) GetTouchedAt() int64 { + if x != nil { + return x.TouchedAt + } + return 0 +} + +func (x *TopicDesc) GetDefacs() *DefaultAcsMode { + if x != nil { + return x.Defacs + } + return nil +} + +func (x *TopicDesc) GetAcs() *AccessMode { + if x != nil { + return x.Acs + } + return nil +} + +func (x *TopicDesc) GetSeqId() int32 { + if x != nil { + return x.SeqId + } + return 0 +} + +func (x *TopicDesc) GetReadId() int32 { + if x != nil { + return x.ReadId + } + return 0 +} + +func (x *TopicDesc) GetRecvId() int32 { + if x != nil { + return x.RecvId + } + return 0 +} + +func (x *TopicDesc) GetDelId() int32 { + if x != nil { + return x.DelId + } + return 0 +} + +func (x *TopicDesc) GetPublic() []byte { + if x != nil { + return x.Public + } + return nil +} + +func (x *TopicDesc) GetPrivate() []byte { + if x != nil { + return x.Private + } + return nil +} + +func (x *TopicDesc) GetState() string { + if x != nil { + return x.State + } + return "" +} + +func (x *TopicDesc) GetStateAt() int64 { + if x != nil { + return x.StateAt + } + return 0 +} + +func (x *TopicDesc) GetTrusted() []byte { + if x != nil { + return x.Trusted + } + return nil +} + +func (x *TopicDesc) GetIsChan() bool { + if x != nil { + return x.IsChan + } + return false +} + +func (x *TopicDesc) GetOnline() bool { + if x != nil { + return x.Online + } + return false +} + +func (x *TopicDesc) GetLastSeenTime() int64 { + if x != nil { + return x.LastSeenTime + } + return 0 +} + +func (x *TopicDesc) GetLastSeenUserAgent() string { + if x != nil { + return x.LastSeenUserAgent + } + return "" +} + +// MsgTopicSub: topic subscription details, sent in Meta message +type TopicSub struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UpdatedAt int64 `protobuf:"varint,1,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` + DeletedAt int64 `protobuf:"varint,2,opt,name=deleted_at,json=deletedAt,proto3" json:"deleted_at,omitempty"` + Online bool `protobuf:"varint,3,opt,name=online,proto3" json:"online,omitempty"` + Acs *AccessMode `protobuf:"bytes,4,opt,name=acs,proto3" json:"acs,omitempty"` + ReadId int32 `protobuf:"varint,5,opt,name=read_id,json=readId,proto3" json:"read_id,omitempty"` + RecvId int32 `protobuf:"varint,6,opt,name=recv_id,json=recvId,proto3" json:"recv_id,omitempty"` + Public []byte `protobuf:"bytes,7,opt,name=public,proto3" json:"public,omitempty"` + Trusted []byte `protobuf:"bytes,16,opt,name=trusted,proto3" json:"trusted,omitempty"` // 16! + Private []byte `protobuf:"bytes,8,opt,name=private,proto3" json:"private,omitempty"` + // Uid of the subscribed user + UserId string `protobuf:"bytes,9,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + // Topic name of this subscription + Topic string `protobuf:"bytes,10,opt,name=topic,proto3" json:"topic,omitempty"` + TouchedAt int64 `protobuf:"varint,11,opt,name=touched_at,json=touchedAt,proto3" json:"touched_at,omitempty"` + // ID of the last {data} message in a topic + SeqId int32 `protobuf:"varint,12,opt,name=seq_id,json=seqId,proto3" json:"seq_id,omitempty"` + // Messages are deleted up to this ID + DelId int32 `protobuf:"varint,13,opt,name=del_id,json=delId,proto3" json:"del_id,omitempty"` + // Other user's last online timestamp & user agent + LastSeenTime int64 `protobuf:"varint,14,opt,name=last_seen_time,json=lastSeenTime,proto3" json:"last_seen_time,omitempty"` + LastSeenUserAgent string `protobuf:"bytes,15,opt,name=last_seen_user_agent,json=lastSeenUserAgent,proto3" json:"last_seen_user_agent,omitempty"` +} + +func (x *TopicSub) Reset() { + *x = TopicSub{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TopicSub) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TopicSub) ProtoMessage() {} + +func (x *TopicSub) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[24] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TopicSub.ProtoReflect.Descriptor instead. +func (*TopicSub) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{24} +} + +func (x *TopicSub) GetUpdatedAt() int64 { + if x != nil { + return x.UpdatedAt + } + return 0 +} + +func (x *TopicSub) GetDeletedAt() int64 { + if x != nil { + return x.DeletedAt + } + return 0 +} + +func (x *TopicSub) GetOnline() bool { + if x != nil { + return x.Online + } + return false +} + +func (x *TopicSub) GetAcs() *AccessMode { + if x != nil { + return x.Acs + } + return nil +} + +func (x *TopicSub) GetReadId() int32 { + if x != nil { + return x.ReadId + } + return 0 +} + +func (x *TopicSub) GetRecvId() int32 { + if x != nil { + return x.RecvId + } + return 0 +} + +func (x *TopicSub) GetPublic() []byte { + if x != nil { + return x.Public + } + return nil +} + +func (x *TopicSub) GetTrusted() []byte { + if x != nil { + return x.Trusted + } + return nil +} + +func (x *TopicSub) GetPrivate() []byte { + if x != nil { + return x.Private + } + return nil +} + +func (x *TopicSub) GetUserId() string { + if x != nil { + return x.UserId + } + return "" +} + +func (x *TopicSub) GetTopic() string { + if x != nil { + return x.Topic + } + return "" +} + +func (x *TopicSub) GetTouchedAt() int64 { + if x != nil { + return x.TouchedAt + } + return 0 +} + +func (x *TopicSub) GetSeqId() int32 { + if x != nil { + return x.SeqId + } + return 0 +} + +func (x *TopicSub) GetDelId() int32 { + if x != nil { + return x.DelId + } + return 0 +} + +func (x *TopicSub) GetLastSeenTime() int64 { + if x != nil { + return x.LastSeenTime + } + return 0 +} + +func (x *TopicSub) GetLastSeenUserAgent() string { + if x != nil { + return x.LastSeenUserAgent + } + return "" +} + +type DelValues struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + DelId int32 `protobuf:"varint,1,opt,name=del_id,json=delId,proto3" json:"del_id,omitempty"` + DelSeq []*SeqRange `protobuf:"bytes,2,rep,name=del_seq,json=delSeq,proto3" json:"del_seq,omitempty"` +} + +func (x *DelValues) Reset() { + *x = DelValues{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DelValues) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DelValues) ProtoMessage() {} + +func (x *DelValues) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[25] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DelValues.ProtoReflect.Descriptor instead. +func (*DelValues) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{25} +} + +func (x *DelValues) GetDelId() int32 { + if x != nil { + return x.DelId + } + return 0 +} + +func (x *DelValues) GetDelSeq() []*SeqRange { + if x != nil { + return x.DelSeq + } + return nil +} + +// {ctrl} message +type ServerCtrl struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Topic string `protobuf:"bytes,2,opt,name=topic,proto3" json:"topic,omitempty"` + Code int32 `protobuf:"varint,3,opt,name=code,proto3" json:"code,omitempty"` + Text string `protobuf:"bytes,4,opt,name=text,proto3" json:"text,omitempty"` + Params map[string][]byte `protobuf:"bytes,5,rep,name=params,proto3" json:"params,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *ServerCtrl) Reset() { + *x = ServerCtrl{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ServerCtrl) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ServerCtrl) ProtoMessage() {} + +func (x *ServerCtrl) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[26] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ServerCtrl.ProtoReflect.Descriptor instead. +func (*ServerCtrl) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{26} +} + +func (x *ServerCtrl) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *ServerCtrl) GetTopic() string { + if x != nil { + return x.Topic + } + return "" +} + +func (x *ServerCtrl) GetCode() int32 { + if x != nil { + return x.Code + } + return 0 +} + +func (x *ServerCtrl) GetText() string { + if x != nil { + return x.Text + } + return "" +} + +func (x *ServerCtrl) GetParams() map[string][]byte { + if x != nil { + return x.Params + } + return nil +} + +// {data} message +type ServerData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Topic string `protobuf:"bytes,1,opt,name=topic,proto3" json:"topic,omitempty"` + // ID of the user who originated the message as {pub}, could be empty if sent by the system + FromUserId string `protobuf:"bytes,2,opt,name=from_user_id,json=fromUserId,proto3" json:"from_user_id,omitempty"` + // Timestamp when the message was sent. + Timestamp int64 `protobuf:"varint,7,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + // Timestamp when the message was deleted or 0. Milliseconds since the epoch 01/01/1970 + DeletedAt int64 `protobuf:"varint,3,opt,name=deleted_at,json=deletedAt,proto3" json:"deleted_at,omitempty"` + SeqId int32 `protobuf:"varint,4,opt,name=seq_id,json=seqId,proto3" json:"seq_id,omitempty"` + Head map[string][]byte `protobuf:"bytes,5,rep,name=head,proto3" json:"head,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Content []byte `protobuf:"bytes,6,opt,name=content,proto3" json:"content,omitempty"` +} + +func (x *ServerData) Reset() { + *x = ServerData{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ServerData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ServerData) ProtoMessage() {} + +func (x *ServerData) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[27] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ServerData.ProtoReflect.Descriptor instead. +func (*ServerData) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{27} +} + +func (x *ServerData) GetTopic() string { + if x != nil { + return x.Topic + } + return "" +} + +func (x *ServerData) GetFromUserId() string { + if x != nil { + return x.FromUserId + } + return "" +} + +func (x *ServerData) GetTimestamp() int64 { + if x != nil { + return x.Timestamp + } + return 0 +} + +func (x *ServerData) GetDeletedAt() int64 { + if x != nil { + return x.DeletedAt + } + return 0 +} + +func (x *ServerData) GetSeqId() int32 { + if x != nil { + return x.SeqId + } + return 0 +} + +func (x *ServerData) GetHead() map[string][]byte { + if x != nil { + return x.Head + } + return nil +} + +func (x *ServerData) GetContent() []byte { + if x != nil { + return x.Content + } + return nil +} + +// {pres} message +type ServerPres struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Topic string `protobuf:"bytes,1,opt,name=topic,proto3" json:"topic,omitempty"` + Src string `protobuf:"bytes,2,opt,name=src,proto3" json:"src,omitempty"` + What ServerPres_What `protobuf:"varint,3,opt,name=what,proto3,enum=pbx.ServerPres_What" json:"what,omitempty"` + UserAgent string `protobuf:"bytes,4,opt,name=user_agent,json=userAgent,proto3" json:"user_agent,omitempty"` + SeqId int32 `protobuf:"varint,5,opt,name=seq_id,json=seqId,proto3" json:"seq_id,omitempty"` + DelId int32 `protobuf:"varint,6,opt,name=del_id,json=delId,proto3" json:"del_id,omitempty"` + DelSeq []*SeqRange `protobuf:"bytes,7,rep,name=del_seq,json=delSeq,proto3" json:"del_seq,omitempty"` + TargetUserId string `protobuf:"bytes,8,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` + ActorUserId string `protobuf:"bytes,9,opt,name=actor_user_id,json=actorUserId,proto3" json:"actor_user_id,omitempty"` + Acs *AccessMode `protobuf:"bytes,10,opt,name=acs,proto3" json:"acs,omitempty"` +} + +func (x *ServerPres) Reset() { + *x = ServerPres{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ServerPres) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ServerPres) ProtoMessage() {} + +func (x *ServerPres) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[28] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ServerPres.ProtoReflect.Descriptor instead. +func (*ServerPres) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{28} +} + +func (x *ServerPres) GetTopic() string { + if x != nil { + return x.Topic + } + return "" +} + +func (x *ServerPres) GetSrc() string { + if x != nil { + return x.Src + } + return "" +} + +func (x *ServerPres) GetWhat() ServerPres_What { + if x != nil { + return x.What + } + return ServerPres_X3 +} + +func (x *ServerPres) GetUserAgent() string { + if x != nil { + return x.UserAgent + } + return "" +} + +func (x *ServerPres) GetSeqId() int32 { + if x != nil { + return x.SeqId + } + return 0 +} + +func (x *ServerPres) GetDelId() int32 { + if x != nil { + return x.DelId + } + return 0 +} + +func (x *ServerPres) GetDelSeq() []*SeqRange { + if x != nil { + return x.DelSeq + } + return nil +} + +func (x *ServerPres) GetTargetUserId() string { + if x != nil { + return x.TargetUserId + } + return "" +} + +func (x *ServerPres) GetActorUserId() string { + if x != nil { + return x.ActorUserId + } + return "" +} + +func (x *ServerPres) GetAcs() *AccessMode { + if x != nil { + return x.Acs + } + return nil +} + +// {meta} message +type ServerMeta struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Topic string `protobuf:"bytes,2,opt,name=topic,proto3" json:"topic,omitempty"` + Desc *TopicDesc `protobuf:"bytes,3,opt,name=desc,proto3" json:"desc,omitempty"` + Sub []*TopicSub `protobuf:"bytes,4,rep,name=sub,proto3" json:"sub,omitempty"` + Del *DelValues `protobuf:"bytes,5,opt,name=del,proto3" json:"del,omitempty"` + Tags []string `protobuf:"bytes,6,rep,name=tags,proto3" json:"tags,omitempty"` + Cred []*ServerCred `protobuf:"bytes,7,rep,name=cred,proto3" json:"cred,omitempty"` + Aux map[string][]byte `protobuf:"bytes,8,rep,name=aux,proto3" json:"aux,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *ServerMeta) Reset() { + *x = ServerMeta{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ServerMeta) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ServerMeta) ProtoMessage() {} + +func (x *ServerMeta) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[29] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ServerMeta.ProtoReflect.Descriptor instead. +func (*ServerMeta) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{29} +} + +func (x *ServerMeta) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *ServerMeta) GetTopic() string { + if x != nil { + return x.Topic + } + return "" +} + +func (x *ServerMeta) GetDesc() *TopicDesc { + if x != nil { + return x.Desc + } + return nil +} + +func (x *ServerMeta) GetSub() []*TopicSub { + if x != nil { + return x.Sub + } + return nil +} + +func (x *ServerMeta) GetDel() *DelValues { + if x != nil { + return x.Del + } + return nil +} + +func (x *ServerMeta) GetTags() []string { + if x != nil { + return x.Tags + } + return nil +} + +func (x *ServerMeta) GetCred() []*ServerCred { + if x != nil { + return x.Cred + } + return nil +} + +func (x *ServerMeta) GetAux() map[string][]byte { + if x != nil { + return x.Aux + } + return nil +} + +// {info} message: server-side copy of ClientNote with From and optional Src added. +type ServerInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Topic string `protobuf:"bytes,1,opt,name=topic,proto3" json:"topic,omitempty"` + FromUserId string `protobuf:"bytes,2,opt,name=from_user_id,json=fromUserId,proto3" json:"from_user_id,omitempty"` + What InfoNote `protobuf:"varint,3,opt,name=what,proto3,enum=pbx.InfoNote" json:"what,omitempty"` + SeqId int32 `protobuf:"varint,4,opt,name=seq_id,json=seqId,proto3" json:"seq_id,omitempty"` + Src string `protobuf:"bytes,5,opt,name=src,proto3" json:"src,omitempty"` + Event CallEvent `protobuf:"varint,6,opt,name=event,proto3,enum=pbx.CallEvent" json:"event,omitempty"` + Payload []byte `protobuf:"bytes,7,opt,name=payload,proto3" json:"payload,omitempty"` +} + +func (x *ServerInfo) Reset() { + *x = ServerInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ServerInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ServerInfo) ProtoMessage() {} + +func (x *ServerInfo) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[30] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ServerInfo.ProtoReflect.Descriptor instead. +func (*ServerInfo) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{30} +} + +func (x *ServerInfo) GetTopic() string { + if x != nil { + return x.Topic + } + return "" +} + +func (x *ServerInfo) GetFromUserId() string { + if x != nil { + return x.FromUserId + } + return "" +} + +func (x *ServerInfo) GetWhat() InfoNote { + if x != nil { + return x.What + } + return InfoNote_X1 +} + +func (x *ServerInfo) GetSeqId() int32 { + if x != nil { + return x.SeqId + } + return 0 +} + +func (x *ServerInfo) GetSrc() string { + if x != nil { + return x.Src + } + return "" +} + +func (x *ServerInfo) GetEvent() CallEvent { + if x != nil { + return x.Event + } + return CallEvent_X2 +} + +func (x *ServerInfo) GetPayload() []byte { + if x != nil { + return x.Payload + } + return nil +} + +// Cumulative message +type ServerMsg struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Message: + // + // *ServerMsg_Ctrl + // *ServerMsg_Data + // *ServerMsg_Pres + // *ServerMsg_Meta + // *ServerMsg_Info + Message isServerMsg_Message `protobuf_oneof:"Message"` + // DEPRECATED. Will be removed soon. + // When response is sent to Root, send internal topic name too. + // + // Deprecated: Do not use. + Topic string `protobuf:"bytes,6,opt,name=topic,proto3" json:"topic,omitempty"` +} + +func (x *ServerMsg) Reset() { + *x = ServerMsg{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ServerMsg) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ServerMsg) ProtoMessage() {} + +func (x *ServerMsg) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[31] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ServerMsg.ProtoReflect.Descriptor instead. +func (*ServerMsg) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{31} +} + +func (m *ServerMsg) GetMessage() isServerMsg_Message { + if m != nil { + return m.Message + } + return nil +} + +func (x *ServerMsg) GetCtrl() *ServerCtrl { + if x, ok := x.GetMessage().(*ServerMsg_Ctrl); ok { + return x.Ctrl + } + return nil +} + +func (x *ServerMsg) GetData() *ServerData { + if x, ok := x.GetMessage().(*ServerMsg_Data); ok { + return x.Data + } + return nil +} + +func (x *ServerMsg) GetPres() *ServerPres { + if x, ok := x.GetMessage().(*ServerMsg_Pres); ok { + return x.Pres + } + return nil +} + +func (x *ServerMsg) GetMeta() *ServerMeta { + if x, ok := x.GetMessage().(*ServerMsg_Meta); ok { + return x.Meta + } + return nil +} + +func (x *ServerMsg) GetInfo() *ServerInfo { + if x, ok := x.GetMessage().(*ServerMsg_Info); ok { + return x.Info + } + return nil +} + +// Deprecated: Do not use. +func (x *ServerMsg) GetTopic() string { + if x != nil { + return x.Topic + } + return "" +} + +type isServerMsg_Message interface { + isServerMsg_Message() +} + +type ServerMsg_Ctrl struct { + Ctrl *ServerCtrl `protobuf:"bytes,1,opt,name=ctrl,proto3,oneof"` +} + +type ServerMsg_Data struct { + Data *ServerData `protobuf:"bytes,2,opt,name=data,proto3,oneof"` +} + +type ServerMsg_Pres struct { + Pres *ServerPres `protobuf:"bytes,3,opt,name=pres,proto3,oneof"` +} + +type ServerMsg_Meta struct { + Meta *ServerMeta `protobuf:"bytes,4,opt,name=meta,proto3,oneof"` +} + +type ServerMsg_Info struct { + Info *ServerInfo `protobuf:"bytes,5,opt,name=info,proto3,oneof"` +} + +func (*ServerMsg_Ctrl) isServerMsg_Message() {} + +func (*ServerMsg_Data) isServerMsg_Message() {} + +func (*ServerMsg_Pres) isServerMsg_Message() {} + +func (*ServerMsg_Meta) isServerMsg_Message() {} + +func (*ServerMsg_Info) isServerMsg_Message() {} + +type ServerResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Status RespCode `protobuf:"varint,1,opt,name=status,proto3,enum=pbx.RespCode" json:"status,omitempty"` + Srvmsg *ServerMsg `protobuf:"bytes,2,opt,name=srvmsg,proto3" json:"srvmsg,omitempty"` + Clmsg *ClientMsg `protobuf:"bytes,3,opt,name=clmsg,proto3" json:"clmsg,omitempty"` +} + +func (x *ServerResp) Reset() { + *x = ServerResp{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ServerResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ServerResp) ProtoMessage() {} + +func (x *ServerResp) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[32] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ServerResp.ProtoReflect.Descriptor instead. +func (*ServerResp) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{32} +} + +func (x *ServerResp) GetStatus() RespCode { + if x != nil { + return x.Status + } + return RespCode_CONTINUE +} + +func (x *ServerResp) GetSrvmsg() *ServerMsg { + if x != nil { + return x.Srvmsg + } + return nil +} + +func (x *ServerResp) GetClmsg() *ClientMsg { + if x != nil { + return x.Clmsg + } + return nil +} + +// Context message +type Session struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + SessionId string `protobuf:"bytes,1,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` + UserId string `protobuf:"bytes,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + AuthLevel AuthLevel `protobuf:"varint,3,opt,name=auth_level,json=authLevel,proto3,enum=pbx.AuthLevel" json:"auth_level,omitempty"` + RemoteAddr string `protobuf:"bytes,4,opt,name=remote_addr,json=remoteAddr,proto3" json:"remote_addr,omitempty"` + UserAgent string `protobuf:"bytes,5,opt,name=user_agent,json=userAgent,proto3" json:"user_agent,omitempty"` + DeviceId string `protobuf:"bytes,6,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + Language string `protobuf:"bytes,7,opt,name=language,proto3" json:"language,omitempty"` +} + +func (x *Session) Reset() { + *x = Session{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Session) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Session) ProtoMessage() {} + +func (x *Session) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[33] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Session.ProtoReflect.Descriptor instead. +func (*Session) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{33} +} + +func (x *Session) GetSessionId() string { + if x != nil { + return x.SessionId + } + return "" +} + +func (x *Session) GetUserId() string { + if x != nil { + return x.UserId + } + return "" +} + +func (x *Session) GetAuthLevel() AuthLevel { + if x != nil { + return x.AuthLevel + } + return AuthLevel_NONE +} + +func (x *Session) GetRemoteAddr() string { + if x != nil { + return x.RemoteAddr + } + return "" +} + +func (x *Session) GetUserAgent() string { + if x != nil { + return x.UserAgent + } + return "" +} + +func (x *Session) GetDeviceId() string { + if x != nil { + return x.DeviceId + } + return "" +} + +func (x *Session) GetLanguage() string { + if x != nil { + return x.Language + } + return "" +} + +type ClientReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Msg *ClientMsg `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg,omitempty"` + Sess *Session `protobuf:"bytes,2,opt,name=sess,proto3" json:"sess,omitempty"` +} + +func (x *ClientReq) Reset() { + *x = ClientReq{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[34] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClientReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClientReq) ProtoMessage() {} + +func (x *ClientReq) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[34] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClientReq.ProtoReflect.Descriptor instead. +func (*ClientReq) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{34} +} + +func (x *ClientReq) GetMsg() *ClientMsg { + if x != nil { + return x.Msg + } + return nil +} + +func (x *ClientReq) GetSess() *Session { + if x != nil { + return x.Sess + } + return nil +} + +type SearchQuery struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Query string `protobuf:"bytes,2,opt,name=query,proto3" json:"query,omitempty"` +} + +func (x *SearchQuery) Reset() { + *x = SearchQuery{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SearchQuery) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SearchQuery) ProtoMessage() {} + +func (x *SearchQuery) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[35] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SearchQuery.ProtoReflect.Descriptor instead. +func (*SearchQuery) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{35} +} + +func (x *SearchQuery) GetUserId() string { + if x != nil { + return x.UserId + } + return "" +} + +func (x *SearchQuery) GetQuery() string { + if x != nil { + return x.Query + } + return "" +} + +type SearchFound struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Status RespCode `protobuf:"varint,1,opt,name=status,proto3,enum=pbx.RespCode" json:"status,omitempty"` + // New search query If status == REPLACE, otherwise unset. + Query string `protobuf:"bytes,2,opt,name=query,proto3" json:"query,omitempty"` + // Search results. + Result []*TopicSub `protobuf:"bytes,3,rep,name=result,proto3" json:"result,omitempty"` +} + +func (x *SearchFound) Reset() { + *x = SearchFound{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[36] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SearchFound) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SearchFound) ProtoMessage() {} + +func (x *SearchFound) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[36] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SearchFound.ProtoReflect.Descriptor instead. +func (*SearchFound) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{36} +} + +func (x *SearchFound) GetStatus() RespCode { + if x != nil { + return x.Status + } + return RespCode_CONTINUE +} + +func (x *SearchFound) GetQuery() string { + if x != nil { + return x.Query + } + return "" +} + +func (x *SearchFound) GetResult() []*TopicSub { + if x != nil { + return x.Result + } + return nil +} + +type TopicEvent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Action Crud `protobuf:"varint,1,opt,name=action,proto3,enum=pbx.Crud" json:"action,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Desc *TopicDesc `protobuf:"bytes,3,opt,name=desc,proto3" json:"desc,omitempty"` +} + +func (x *TopicEvent) Reset() { + *x = TopicEvent{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[37] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TopicEvent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TopicEvent) ProtoMessage() {} + +func (x *TopicEvent) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[37] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TopicEvent.ProtoReflect.Descriptor instead. +func (*TopicEvent) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{37} +} + +func (x *TopicEvent) GetAction() Crud { + if x != nil { + return x.Action + } + return Crud_CREATE +} + +func (x *TopicEvent) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *TopicEvent) GetDesc() *TopicDesc { + if x != nil { + return x.Desc + } + return nil +} + +type AccountEvent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Action Crud `protobuf:"varint,1,opt,name=action,proto3,enum=pbx.Crud" json:"action,omitempty"` + UserId string `protobuf:"bytes,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + DefaultAcs *DefaultAcsMode `protobuf:"bytes,3,opt,name=default_acs,json=defaultAcs,proto3" json:"default_acs,omitempty"` + Public []byte `protobuf:"bytes,4,opt,name=public,proto3" json:"public,omitempty"` + // Indexable tags for user discovery + Tags []string `protobuf:"bytes,8,rep,name=tags,proto3" json:"tags,omitempty"` +} + +func (x *AccountEvent) Reset() { + *x = AccountEvent{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[38] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AccountEvent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AccountEvent) ProtoMessage() {} + +func (x *AccountEvent) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[38] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AccountEvent.ProtoReflect.Descriptor instead. +func (*AccountEvent) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{38} +} + +func (x *AccountEvent) GetAction() Crud { + if x != nil { + return x.Action + } + return Crud_CREATE +} + +func (x *AccountEvent) GetUserId() string { + if x != nil { + return x.UserId + } + return "" +} + +func (x *AccountEvent) GetDefaultAcs() *DefaultAcsMode { + if x != nil { + return x.DefaultAcs + } + return nil +} + +func (x *AccountEvent) GetPublic() []byte { + if x != nil { + return x.Public + } + return nil +} + +func (x *AccountEvent) GetTags() []string { + if x != nil { + return x.Tags + } + return nil +} + +type SubscriptionEvent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Action Crud `protobuf:"varint,1,opt,name=action,proto3,enum=pbx.Crud" json:"action,omitempty"` + Topic string `protobuf:"bytes,2,opt,name=topic,proto3" json:"topic,omitempty"` + UserId string `protobuf:"bytes,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + DelId int32 `protobuf:"varint,4,opt,name=del_id,json=delId,proto3" json:"del_id,omitempty"` + ReadId int32 `protobuf:"varint,5,opt,name=read_id,json=readId,proto3" json:"read_id,omitempty"` + RecvId int32 `protobuf:"varint,6,opt,name=recv_id,json=recvId,proto3" json:"recv_id,omitempty"` + Mode *AccessMode `protobuf:"bytes,7,opt,name=mode,proto3" json:"mode,omitempty"` + Private []byte `protobuf:"bytes,8,opt,name=private,proto3" json:"private,omitempty"` +} + +func (x *SubscriptionEvent) Reset() { + *x = SubscriptionEvent{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[39] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SubscriptionEvent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SubscriptionEvent) ProtoMessage() {} + +func (x *SubscriptionEvent) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[39] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SubscriptionEvent.ProtoReflect.Descriptor instead. +func (*SubscriptionEvent) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{39} +} + +func (x *SubscriptionEvent) GetAction() Crud { + if x != nil { + return x.Action + } + return Crud_CREATE +} + +func (x *SubscriptionEvent) GetTopic() string { + if x != nil { + return x.Topic + } + return "" +} + +func (x *SubscriptionEvent) GetUserId() string { + if x != nil { + return x.UserId + } + return "" +} + +func (x *SubscriptionEvent) GetDelId() int32 { + if x != nil { + return x.DelId + } + return 0 +} + +func (x *SubscriptionEvent) GetReadId() int32 { + if x != nil { + return x.ReadId + } + return 0 +} + +func (x *SubscriptionEvent) GetRecvId() int32 { + if x != nil { + return x.RecvId + } + return 0 +} + +func (x *SubscriptionEvent) GetMode() *AccessMode { + if x != nil { + return x.Mode + } + return nil +} + +func (x *SubscriptionEvent) GetPrivate() []byte { + if x != nil { + return x.Private + } + return nil +} + +type MessageEvent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Action Crud `protobuf:"varint,1,opt,name=action,proto3,enum=pbx.Crud" json:"action,omitempty"` + Msg *ServerData `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` +} + +func (x *MessageEvent) Reset() { + *x = MessageEvent{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[40] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MessageEvent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MessageEvent) ProtoMessage() {} + +func (x *MessageEvent) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[40] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MessageEvent.ProtoReflect.Descriptor instead. +func (*MessageEvent) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{40} +} + +func (x *MessageEvent) GetAction() Crud { + if x != nil { + return x.Action + } + return Crud_CREATE +} + +func (x *MessageEvent) GetMsg() *ServerData { + if x != nil { + return x.Msg + } + return nil +} + +type Auth struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Scheme string `protobuf:"bytes,1,opt,name=scheme,proto3" json:"scheme,omitempty"` + Secret string `protobuf:"bytes,2,opt,name=secret,proto3" json:"secret,omitempty"` +} + +func (x *Auth) Reset() { + *x = Auth{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[41] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Auth) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Auth) ProtoMessage() {} + +func (x *Auth) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[41] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Auth.ProtoReflect.Descriptor instead. +func (*Auth) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{41} +} + +func (x *Auth) GetScheme() string { + if x != nil { + return x.Scheme + } + return "" +} + +func (x *Auth) GetSecret() string { + if x != nil { + return x.Secret + } + return "" +} + +// File description. +type FileMeta struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + MimeType string `protobuf:"bytes,2,opt,name=mime_type,json=mimeType,proto3" json:"mime_type,omitempty"` + Etag string `protobuf:"bytes,3,opt,name=etag,proto3" json:"etag,omitempty"` + Size int64 `protobuf:"varint,4,opt,name=size,proto3" json:"size,omitempty"` +} + +func (x *FileMeta) Reset() { + *x = FileMeta{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[42] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FileMeta) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FileMeta) ProtoMessage() {} + +func (x *FileMeta) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[42] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FileMeta.ProtoReflect.Descriptor instead. +func (*FileMeta) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{42} +} + +func (x *FileMeta) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *FileMeta) GetMimeType() string { + if x != nil { + return x.MimeType + } + return "" +} + +func (x *FileMeta) GetEtag() string { + if x != nil { + return x.Etag + } + return "" +} + +func (x *FileMeta) GetSize() int64 { + if x != nil { + return x.Size + } + return 0 +} + +// File upload request. +type FileUpReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Request ID. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Request authentication credentials. + Auth *Auth `protobuf:"bytes,2,opt,name=auth,proto3" json:"auth,omitempty"` + // The topic this upload belongs to. + Topic string `protobuf:"bytes,3,opt,name=topic,proto3" json:"topic,omitempty"` + // Uploaded metadata. + Meta *FileMeta `protobuf:"bytes,4,opt,name=meta,proto3" json:"meta,omitempty"` + // File bytes being uploaded. + Content []byte `protobuf:"bytes,5,opt,name=content,proto3" json:"content,omitempty"` +} + +func (x *FileUpReq) Reset() { + *x = FileUpReq{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[43] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FileUpReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FileUpReq) ProtoMessage() {} + +func (x *FileUpReq) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[43] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FileUpReq.ProtoReflect.Descriptor instead. +func (*FileUpReq) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{43} +} + +func (x *FileUpReq) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *FileUpReq) GetAuth() *Auth { + if x != nil { + return x.Auth + } + return nil +} + +func (x *FileUpReq) GetTopic() string { + if x != nil { + return x.Topic + } + return "" +} + +func (x *FileUpReq) GetMeta() *FileMeta { + if x != nil { + return x.Meta + } + return nil +} + +func (x *FileUpReq) GetContent() []byte { + if x != nil { + return x.Content + } + return nil +} + +// Response to file upload. +type FileUpResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Response ID. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Response code. + Code int32 `protobuf:"varint,2,opt,name=code,proto3" json:"code,omitempty"` + // Response text. + Text string `protobuf:"bytes,3,opt,name=text,proto3" json:"text,omitempty"` + Meta *FileMeta `protobuf:"bytes,4,opt,name=meta,proto3" json:"meta,omitempty"` + // New upload location. + RedirUrl string `protobuf:"bytes,5,opt,name=redir_url,json=redirUrl,proto3" json:"redir_url,omitempty"` +} + +func (x *FileUpResp) Reset() { + *x = FileUpResp{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[44] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FileUpResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FileUpResp) ProtoMessage() {} + +func (x *FileUpResp) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[44] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FileUpResp.ProtoReflect.Descriptor instead. +func (*FileUpResp) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{44} +} + +func (x *FileUpResp) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *FileUpResp) GetCode() int32 { + if x != nil { + return x.Code + } + return 0 +} + +func (x *FileUpResp) GetText() string { + if x != nil { + return x.Text + } + return "" +} + +func (x *FileUpResp) GetMeta() *FileMeta { + if x != nil { + return x.Meta + } + return nil +} + +func (x *FileUpResp) GetRedirUrl() string { + if x != nil { + return x.RedirUrl + } + return "" +} + +// File download request. +type FileDownReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Request ID + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Request authentication credentials. + Auth *Auth `protobuf:"bytes,2,opt,name=auth,proto3" json:"auth,omitempty"` + // File URI to download. + Uri string `protobuf:"bytes,3,opt,name=uri,proto3" json:"uri,omitempty"` + // ETag + IfModified string `protobuf:"bytes,4,opt,name=if_modified,json=ifModified,proto3" json:"if_modified,omitempty"` +} + +func (x *FileDownReq) Reset() { + *x = FileDownReq{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[45] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FileDownReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FileDownReq) ProtoMessage() {} + +func (x *FileDownReq) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[45] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FileDownReq.ProtoReflect.Descriptor instead. +func (*FileDownReq) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{45} +} + +func (x *FileDownReq) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *FileDownReq) GetAuth() *Auth { + if x != nil { + return x.Auth + } + return nil +} + +func (x *FileDownReq) GetUri() string { + if x != nil { + return x.Uri + } + return "" +} + +func (x *FileDownReq) GetIfModified() string { + if x != nil { + return x.IfModified + } + return "" +} + +// Response to file download. +type FileDownResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Response ID. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Response code. + Code int32 `protobuf:"varint,2,opt,name=code,proto3" json:"code,omitempty"` + // Response text. + Text string `protobuf:"bytes,3,opt,name=text,proto3" json:"text,omitempty"` + Meta *FileMeta `protobuf:"bytes,4,opt,name=meta,proto3" json:"meta,omitempty"` + // File location. + RedirUrl string `protobuf:"bytes,5,opt,name=redir_url,json=redirUrl,proto3" json:"redir_url,omitempty"` + // File bytes. + Content []byte `protobuf:"bytes,6,opt,name=content,proto3" json:"content,omitempty"` +} + +func (x *FileDownResp) Reset() { + *x = FileDownResp{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[46] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FileDownResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FileDownResp) ProtoMessage() {} + +func (x *FileDownResp) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[46] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FileDownResp.ProtoReflect.Descriptor instead. +func (*FileDownResp) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{46} +} + +func (x *FileDownResp) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *FileDownResp) GetCode() int32 { + if x != nil { + return x.Code + } + return 0 +} + +func (x *FileDownResp) GetText() string { + if x != nil { + return x.Text + } + return "" +} + +func (x *FileDownResp) GetMeta() *FileMeta { + if x != nil { + return x.Meta + } + return nil +} + +func (x *FileDownResp) GetRedirUrl() string { + if x != nil { + return x.RedirUrl + } + return "" +} + +func (x *FileDownResp) GetContent() []byte { + if x != nil { + return x.Content + } + return nil +} + +var File_model_proto protoreflect.FileDescriptor + +var file_model_proto_rawDesc = []byte{ + 0x0a, 0x0b, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x03, 0x70, + 0x62, 0x78, 0x22, 0x08, 0x0a, 0x06, 0x55, 0x6e, 0x75, 0x73, 0x65, 0x64, 0x22, 0x38, 0x0a, 0x0e, + 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x41, 0x63, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x12, + 0x0a, 0x04, 0x61, 0x75, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x75, + 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x6e, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x61, 0x6e, 0x6f, 0x6e, 0x22, 0x36, 0x0a, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x77, 0x61, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x77, 0x61, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x69, 0x76, 0x65, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x22, 0x35, + 0x0a, 0x06, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, + 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x22, 0xc6, 0x01, 0x0a, 0x0a, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x43, 0x72, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, + 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, + 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x64, 0x2e, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x70, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x8b, + 0x01, 0x0a, 0x07, 0x53, 0x65, 0x74, 0x44, 0x65, 0x73, 0x63, 0x12, 0x34, 0x0a, 0x0b, 0x64, 0x65, + 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x61, 0x63, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x13, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x41, 0x63, 0x73, + 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x0a, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x41, 0x63, 0x73, + 0x12, 0x16, 0x0a, 0x06, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x06, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x69, 0x76, + 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, 0x72, 0x69, 0x76, 0x61, + 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x07, 0x74, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x22, 0x2c, 0x0a, 0x08, + 0x53, 0x65, 0x71, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6c, 0x6f, 0x77, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6c, 0x6f, 0x77, 0x12, 0x0e, 0x0a, 0x02, 0x68, 0x69, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x68, 0x69, 0x22, 0xd4, 0x01, 0x0a, 0x07, 0x47, + 0x65, 0x74, 0x4f, 0x70, 0x74, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x69, 0x66, 0x5f, 0x6d, 0x6f, 0x64, + 0x69, 0x66, 0x69, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x0f, 0x69, 0x66, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x53, 0x69, 0x6e, + 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x19, 0x0a, 0x08, + 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, + 0x73, 0x69, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x65, 0x66, 0x6f, 0x72, + 0x65, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x62, 0x65, 0x66, 0x6f, + 0x72, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x25, 0x0a, 0x06, 0x72, 0x61, + 0x6e, 0x67, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x62, 0x78, + 0x2e, 0x53, 0x65, 0x71, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x06, 0x72, 0x61, 0x6e, 0x67, 0x65, + 0x73, 0x22, 0x82, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x12, + 0x0a, 0x04, 0x77, 0x68, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x77, 0x68, + 0x61, 0x74, 0x12, 0x20, 0x0a, 0x04, 0x64, 0x65, 0x73, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x70, 0x74, 0x73, 0x52, 0x04, + 0x64, 0x65, 0x73, 0x63, 0x12, 0x1e, 0x0a, 0x03, 0x73, 0x75, 0x62, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x70, 0x74, 0x73, 0x52, + 0x03, 0x73, 0x75, 0x62, 0x12, 0x20, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x70, 0x74, 0x73, + 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xe6, 0x01, 0x0a, 0x08, 0x53, 0x65, 0x74, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x04, 0x64, 0x65, 0x73, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x53, 0x65, 0x74, 0x44, 0x65, 0x73, 0x63, 0x52, + 0x04, 0x64, 0x65, 0x73, 0x63, 0x12, 0x1d, 0x0a, 0x03, 0x73, 0x75, 0x62, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x52, + 0x03, 0x73, 0x75, 0x62, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x23, 0x0a, 0x04, 0x63, 0x72, 0x65, 0x64, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x64, 0x52, 0x04, 0x63, 0x72, 0x65, 0x64, 0x12, 0x28, 0x0a, + 0x03, 0x61, 0x75, 0x78, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x78, + 0x2e, 0x53, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x41, 0x75, 0x78, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x03, 0x61, 0x75, 0x78, 0x1a, 0x36, 0x0a, 0x08, 0x41, 0x75, 0x78, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, + 0xd0, 0x01, 0x0a, 0x08, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x48, 0x69, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, + 0x75, 0x73, 0x65, 0x72, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x76, + 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x76, 0x65, 0x72, 0x12, 0x1b, 0x0a, + 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x61, + 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6c, 0x61, 0x6e, 0x67, 0x12, 0x1a, + 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x61, + 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, + 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x65, + 0x6e, 0x61, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x65, 0x6e, 0x61, + 0x6e, 0x74, 0x22, 0xee, 0x02, 0x0a, 0x09, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x41, 0x63, 0x63, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x6f, 0x67, + 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x12, + 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, + 0x61, 0x67, 0x73, 0x12, 0x20, 0x0a, 0x04, 0x64, 0x65, 0x73, 0x63, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x53, 0x65, 0x74, 0x44, 0x65, 0x73, 0x63, 0x52, + 0x04, 0x64, 0x65, 0x73, 0x63, 0x12, 0x23, 0x0a, 0x04, 0x63, 0x72, 0x65, 0x64, 0x18, 0x08, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x43, 0x72, 0x65, 0x64, 0x52, 0x04, 0x63, 0x72, 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, + 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2d, 0x0a, 0x0a, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x6c, + 0x65, 0x76, 0x65, 0x6c, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x78, + 0x2e, 0x41, 0x75, 0x74, 0x68, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, + 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6d, 0x70, 0x5f, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x6d, 0x70, 0x53, 0x63, + 0x68, 0x65, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6d, 0x70, 0x5f, 0x73, 0x65, 0x63, 0x72, + 0x65, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x74, 0x6d, 0x70, 0x53, 0x65, 0x63, + 0x72, 0x65, 0x74, 0x22, 0x72, 0x0a, 0x0b, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, + 0x69, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, + 0x63, 0x72, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x73, 0x65, 0x63, 0x72, + 0x65, 0x74, 0x12, 0x23, 0x0a, 0x04, 0x63, 0x72, 0x65, 0x64, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x72, 0x65, + 0x64, 0x52, 0x04, 0x63, 0x72, 0x65, 0x64, 0x22, 0x89, 0x01, 0x0a, 0x09, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x53, 0x75, 0x62, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x2a, 0x0a, 0x09, 0x73, + 0x65, 0x74, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, + 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x53, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x08, 0x73, + 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2a, 0x0a, 0x09, 0x67, 0x65, 0x74, 0x5f, 0x71, + 0x75, 0x65, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x62, 0x78, + 0x2e, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x08, 0x67, 0x65, 0x74, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x22, 0x49, 0x0a, 0x0b, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, + 0x76, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x14, 0x0a, 0x05, 0x75, 0x6e, 0x73, 0x75, + 0x62, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x75, 0x6e, 0x73, 0x75, 0x62, 0x22, 0xcb, + 0x01, 0x0a, 0x09, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x75, 0x62, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, + 0x74, 0x6f, 0x70, 0x69, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x70, + 0x69, 0x63, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x5f, 0x65, 0x63, 0x68, 0x6f, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x06, 0x6e, 0x6f, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x2c, 0x0a, 0x04, 0x68, + 0x65, 0x61, 0x64, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x62, 0x78, 0x2e, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x75, 0x62, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x04, 0x68, 0x65, 0x61, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x1a, 0x37, 0x0a, 0x09, 0x48, 0x65, 0x61, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x56, 0x0a, 0x09, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x47, 0x65, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x70, + 0x69, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x12, + 0x23, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, + 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x05, 0x71, + 0x75, 0x65, 0x72, 0x79, 0x22, 0x56, 0x0a, 0x09, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x65, + 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x23, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x53, 0x65, 0x74, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x22, 0x95, 0x02, 0x0a, + 0x09, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, + 0x70, 0x69, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, + 0x12, 0x27, 0x0a, 0x04, 0x77, 0x68, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, + 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x6c, 0x2e, 0x57, + 0x68, 0x61, 0x74, 0x52, 0x04, 0x77, 0x68, 0x61, 0x74, 0x12, 0x26, 0x0a, 0x07, 0x64, 0x65, 0x6c, + 0x5f, 0x73, 0x65, 0x71, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x62, 0x78, + 0x2e, 0x53, 0x65, 0x71, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x06, 0x64, 0x65, 0x6c, 0x53, 0x65, + 0x71, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x04, 0x63, 0x72, + 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x64, 0x52, 0x04, 0x63, 0x72, 0x65, 0x64, 0x12, + 0x12, 0x0a, 0x04, 0x68, 0x61, 0x72, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x68, + 0x61, 0x72, 0x64, 0x22, 0x3f, 0x0a, 0x04, 0x57, 0x68, 0x61, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x58, + 0x30, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x4d, 0x53, 0x47, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, + 0x54, 0x4f, 0x50, 0x49, 0x43, 0x10, 0x02, 0x12, 0x07, 0x0a, 0x03, 0x53, 0x55, 0x42, 0x10, 0x03, + 0x12, 0x08, 0x0a, 0x04, 0x55, 0x53, 0x45, 0x52, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, 0x43, 0x52, + 0x45, 0x44, 0x10, 0x05, 0x22, 0xb4, 0x01, 0x0a, 0x0a, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4e, + 0x6f, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x21, 0x0a, 0x04, 0x77, 0x68, 0x61, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x49, 0x6e, + 0x66, 0x6f, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x04, 0x77, 0x68, 0x61, 0x74, 0x12, 0x15, 0x0a, 0x06, + 0x73, 0x65, 0x71, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x65, + 0x71, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x06, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x24, 0x0a, 0x05, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x78, + 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, + 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x80, 0x01, 0x0a, 0x0b, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x45, 0x78, 0x74, 0x72, 0x61, 0x12, 0x20, 0x0a, 0x0b, 0x61, + 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x0b, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x20, 0x0a, + 0x0c, 0x6f, 0x6e, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x6c, 0x66, 0x5f, 0x6f, 0x66, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x6e, 0x42, 0x65, 0x68, 0x61, 0x6c, 0x66, 0x4f, 0x66, 0x12, + 0x2d, 0x0a, 0x0a, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x4c, 0x65, + 0x76, 0x65, 0x6c, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x22, 0xb2, + 0x03, 0x0a, 0x09, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x73, 0x67, 0x12, 0x1f, 0x0a, 0x02, + 0x68, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x48, 0x69, 0x48, 0x00, 0x52, 0x02, 0x68, 0x69, 0x12, 0x22, 0x0a, + 0x03, 0x61, 0x63, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x78, + 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x41, 0x63, 0x63, 0x48, 0x00, 0x52, 0x03, 0x61, 0x63, + 0x63, 0x12, 0x28, 0x0a, 0x05, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x10, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, + 0x69, 0x6e, 0x48, 0x00, 0x52, 0x05, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x22, 0x0a, 0x03, 0x73, + 0x75, 0x62, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x75, 0x62, 0x48, 0x00, 0x52, 0x03, 0x73, 0x75, 0x62, 0x12, + 0x28, 0x0a, 0x05, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, + 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x76, 0x65, + 0x48, 0x00, 0x52, 0x05, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x12, 0x22, 0x0a, 0x03, 0x70, 0x75, 0x62, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x50, 0x75, 0x62, 0x48, 0x00, 0x52, 0x03, 0x70, 0x75, 0x62, 0x12, 0x22, 0x0a, + 0x03, 0x67, 0x65, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x78, + 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x47, 0x65, 0x74, 0x48, 0x00, 0x52, 0x03, 0x67, 0x65, + 0x74, 0x12, 0x22, 0x0a, 0x03, 0x73, 0x65, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, + 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x74, 0x48, 0x00, + 0x52, 0x03, 0x73, 0x65, 0x74, 0x12, 0x22, 0x0a, 0x03, 0x64, 0x65, 0x6c, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x44, + 0x65, 0x6c, 0x48, 0x00, 0x52, 0x03, 0x64, 0x65, 0x6c, 0x12, 0x25, 0x0a, 0x04, 0x6e, 0x6f, 0x74, + 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x4e, 0x6f, 0x74, 0x65, 0x48, 0x00, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, + 0x12, 0x26, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x10, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x45, 0x78, 0x74, 0x72, + 0x61, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x42, 0x09, 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x22, 0x4e, 0x0a, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x72, 0x65, + 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x64, 0x6f, 0x6e, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x64, + 0x6f, 0x6e, 0x65, 0x22, 0x9d, 0x04, 0x0a, 0x09, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x44, 0x65, 0x73, + 0x63, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, + 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, + 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x75, 0x63, 0x68, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x6f, 0x75, 0x63, 0x68, 0x65, 0x64, 0x41, 0x74, 0x12, 0x2b, + 0x0a, 0x06, 0x64, 0x65, 0x66, 0x61, 0x63, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x41, 0x63, 0x73, 0x4d, + 0x6f, 0x64, 0x65, 0x52, 0x06, 0x64, 0x65, 0x66, 0x61, 0x63, 0x73, 0x12, 0x21, 0x0a, 0x03, 0x61, + 0x63, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x41, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x03, 0x61, 0x63, 0x73, 0x12, 0x15, + 0x0a, 0x06, 0x73, 0x65, 0x71, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, + 0x73, 0x65, 0x71, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x69, 0x64, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x72, 0x65, 0x61, 0x64, 0x49, 0x64, 0x12, 0x17, + 0x0a, 0x07, 0x72, 0x65, 0x63, 0x76, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x06, 0x72, 0x65, 0x63, 0x76, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x64, 0x65, 0x6c, 0x5f, 0x69, + 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x64, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x16, + 0x0a, 0x06, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, + 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, + 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, + 0x61, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x73, 0x74, 0x61, 0x74, 0x65, 0x41, + 0x74, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x18, 0x0e, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x07, 0x74, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x69, + 0x73, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, + 0x43, 0x68, 0x61, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x12, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x24, 0x0a, 0x0e, + 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0f, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x54, 0x69, + 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x14, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x5f, + 0x75, 0x73, 0x65, 0x72, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x11, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x41, 0x67, + 0x65, 0x6e, 0x74, 0x22, 0xd4, 0x03, 0x0a, 0x08, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x53, 0x75, 0x62, + 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, + 0x1d, 0x0a, 0x0a, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x09, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x16, + 0x0a, 0x06, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, + 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x21, 0x0a, 0x03, 0x61, 0x63, 0x73, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x03, 0x61, 0x63, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x65, 0x61, + 0x64, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x72, 0x65, 0x61, 0x64, + 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x65, 0x63, 0x76, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x06, 0x72, 0x65, 0x63, 0x76, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x70, + 0x75, 0x62, 0x6c, 0x69, 0x63, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x18, 0x10, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x74, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x12, 0x18, 0x0a, + 0x07, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, + 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, + 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, + 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x75, 0x63, 0x68, 0x65, + 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x6f, 0x75, 0x63, + 0x68, 0x65, 0x64, 0x41, 0x74, 0x12, 0x15, 0x0a, 0x06, 0x73, 0x65, 0x71, 0x5f, 0x69, 0x64, 0x18, + 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x65, 0x71, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, + 0x64, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x64, 0x65, + 0x6c, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6c, 0x61, 0x73, + 0x74, 0x53, 0x65, 0x65, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x14, 0x6c, 0x61, 0x73, + 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x61, 0x67, 0x65, 0x6e, + 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, + 0x6e, 0x55, 0x73, 0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x22, 0x4a, 0x0a, 0x09, 0x44, 0x65, + 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x15, 0x0a, 0x06, 0x64, 0x65, 0x6c, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x64, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x26, + 0x0a, 0x07, 0x64, 0x65, 0x6c, 0x5f, 0x73, 0x65, 0x71, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x0d, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x53, 0x65, 0x71, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x06, + 0x64, 0x65, 0x6c, 0x53, 0x65, 0x71, 0x22, 0xca, 0x01, 0x0a, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x43, 0x74, 0x72, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x63, + 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, + 0x65, 0x78, 0x74, 0x12, 0x33, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x05, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x43, 0x74, 0x72, 0x6c, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x22, 0x9a, 0x02, 0x0a, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x44, 0x61, + 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x20, 0x0a, 0x0c, 0x66, 0x72, 0x6f, 0x6d, + 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x66, 0x72, 0x6f, 0x6d, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x64, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x15, 0x0a, 0x06, 0x73, 0x65, 0x71, 0x5f, 0x69, + 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x65, 0x71, 0x49, 0x64, 0x12, 0x2d, + 0x0a, 0x04, 0x68, 0x65, 0x61, 0x64, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, + 0x62, 0x78, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x48, 0x65, + 0x61, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x68, 0x65, 0x61, 0x64, 0x12, 0x18, 0x0a, + 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, + 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x1a, 0x37, 0x0a, 0x09, 0x48, 0x65, 0x61, 0x64, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x22, 0xc9, 0x03, 0x0a, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x12, + 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x74, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x72, 0x63, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x73, 0x72, 0x63, 0x12, 0x28, 0x0a, 0x04, 0x77, 0x68, 0x61, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x53, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x2e, 0x57, 0x68, 0x61, 0x74, 0x52, 0x04, 0x77, 0x68, 0x61, + 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, 0x74, + 0x12, 0x15, 0x0a, 0x06, 0x73, 0x65, 0x71, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x05, 0x73, 0x65, 0x71, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x64, 0x65, 0x6c, 0x5f, 0x69, + 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x64, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x26, + 0x0a, 0x07, 0x64, 0x65, 0x6c, 0x5f, 0x73, 0x65, 0x71, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x0d, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x53, 0x65, 0x71, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x06, + 0x64, 0x65, 0x6c, 0x53, 0x65, 0x71, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, + 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, + 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, + 0x61, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, + 0x12, 0x21, 0x0a, 0x03, 0x61, 0x63, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, + 0x70, 0x62, 0x78, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x03, + 0x61, 0x63, 0x73, 0x22, 0x86, 0x01, 0x0a, 0x04, 0x57, 0x68, 0x61, 0x74, 0x12, 0x06, 0x0a, 0x02, + 0x58, 0x33, 0x10, 0x00, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, + 0x4f, 0x46, 0x46, 0x10, 0x02, 0x12, 0x06, 0x0a, 0x02, 0x55, 0x41, 0x10, 0x03, 0x12, 0x07, 0x0a, + 0x03, 0x55, 0x50, 0x44, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, 0x47, 0x4f, 0x4e, 0x45, 0x10, 0x05, + 0x12, 0x07, 0x0a, 0x03, 0x41, 0x43, 0x53, 0x10, 0x06, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x45, 0x52, + 0x4d, 0x10, 0x07, 0x12, 0x07, 0x0a, 0x03, 0x4d, 0x53, 0x47, 0x10, 0x08, 0x12, 0x08, 0x0a, 0x04, + 0x52, 0x45, 0x41, 0x44, 0x10, 0x09, 0x12, 0x08, 0x0a, 0x04, 0x52, 0x45, 0x43, 0x56, 0x10, 0x0a, + 0x12, 0x07, 0x0a, 0x03, 0x44, 0x45, 0x4c, 0x10, 0x0b, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x41, 0x47, + 0x53, 0x10, 0x0c, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x55, 0x58, 0x10, 0x0d, 0x22, 0xb6, 0x02, 0x0a, + 0x0a, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, + 0x6f, 0x70, 0x69, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x70, 0x69, + 0x63, 0x12, 0x22, 0x0a, 0x04, 0x64, 0x65, 0x73, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0e, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x44, 0x65, 0x73, 0x63, 0x52, + 0x04, 0x64, 0x65, 0x73, 0x63, 0x12, 0x1f, 0x0a, 0x03, 0x73, 0x75, 0x62, 0x18, 0x04, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x53, 0x75, + 0x62, 0x52, 0x03, 0x73, 0x75, 0x62, 0x12, 0x20, 0x0a, 0x03, 0x64, 0x65, 0x6c, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x44, 0x65, 0x6c, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x73, 0x52, 0x03, 0x64, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, + 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x23, 0x0a, 0x04, + 0x63, 0x72, 0x65, 0x64, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x78, + 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x72, 0x65, 0x64, 0x52, 0x04, 0x63, 0x72, 0x65, + 0x64, 0x12, 0x2a, 0x0a, 0x03, 0x61, 0x75, 0x78, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, + 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x2e, + 0x41, 0x75, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x03, 0x61, 0x75, 0x78, 0x1a, 0x36, 0x0a, + 0x08, 0x41, 0x75, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xd0, 0x01, 0x0a, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x20, 0x0a, 0x0c, 0x66, 0x72, + 0x6f, 0x6d, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x66, 0x72, 0x6f, 0x6d, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x04, + 0x77, 0x68, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x70, 0x62, 0x78, + 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x04, 0x77, 0x68, 0x61, 0x74, 0x12, + 0x15, 0x0a, 0x06, 0x73, 0x65, 0x71, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x05, 0x73, 0x65, 0x71, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x72, 0x63, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x72, 0x63, 0x12, 0x24, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, + 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x43, 0x61, + 0x6c, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x18, + 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0xf3, 0x01, 0x0a, 0x09, 0x53, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x25, 0x0a, 0x04, 0x63, 0x74, 0x72, 0x6c, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x43, 0x74, 0x72, 0x6c, 0x48, 0x00, 0x52, 0x04, 0x63, 0x74, 0x72, 0x6c, 0x12, 0x25, 0x0a, + 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, + 0x78, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x04, + 0x64, 0x61, 0x74, 0x61, 0x12, 0x25, 0x0a, 0x04, 0x70, 0x72, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x50, + 0x72, 0x65, 0x73, 0x48, 0x00, 0x52, 0x04, 0x70, 0x72, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x04, 0x6d, + 0x65, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x78, 0x2e, + 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x48, 0x00, 0x52, 0x04, 0x6d, 0x65, + 0x74, 0x61, 0x12, 0x25, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x6e, 0x66, + 0x6f, 0x48, 0x00, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x05, 0x74, 0x6f, 0x70, + 0x69, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x05, 0x74, 0x6f, + 0x70, 0x69, 0x63, 0x42, 0x09, 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x81, + 0x01, 0x0a, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x25, 0x0a, + 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, 0x2e, + 0x70, 0x62, 0x78, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x26, 0x0a, 0x06, 0x73, 0x72, 0x76, 0x6d, 0x73, 0x67, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x4d, 0x73, 0x67, 0x52, 0x06, 0x73, 0x72, 0x76, 0x6d, 0x73, 0x67, 0x12, 0x24, 0x0a, 0x05, + 0x63, 0x6c, 0x6d, 0x73, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x62, + 0x78, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x73, 0x67, 0x52, 0x05, 0x63, 0x6c, 0x6d, + 0x73, 0x67, 0x22, 0xe9, 0x01, 0x0a, 0x07, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1d, + 0x0a, 0x0a, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x17, 0x0a, + 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2d, 0x0a, 0x0a, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x6c, + 0x65, 0x76, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x78, + 0x2e, 0x41, 0x75, 0x74, 0x68, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, + 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, + 0x61, 0x64, 0x64, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x6d, 0x6f, + 0x74, 0x65, 0x41, 0x64, 0x64, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x61, + 0x67, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, + 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, + 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x22, 0x4f, + 0x0a, 0x09, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x12, 0x20, 0x0a, 0x03, 0x6d, + 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x73, 0x67, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x20, 0x0a, + 0x04, 0x73, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, + 0x78, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x73, 0x65, 0x73, 0x73, 0x22, + 0x3c, 0x0a, 0x0b, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x17, + 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x22, 0x71, 0x0a, + 0x0b, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x25, 0x0a, 0x06, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x70, + 0x62, 0x78, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x25, 0x0a, 0x06, 0x72, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x62, 0x78, 0x2e, + 0x54, 0x6f, 0x70, 0x69, 0x63, 0x53, 0x75, 0x62, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x22, 0x67, 0x0a, 0x0a, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x21, + 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x09, + 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x43, 0x72, 0x75, 0x64, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x04, 0x64, 0x65, 0x73, 0x63, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x44, + 0x65, 0x73, 0x63, 0x52, 0x04, 0x64, 0x65, 0x73, 0x63, 0x22, 0xac, 0x01, 0x0a, 0x0c, 0x41, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x06, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x09, 0x2e, 0x70, 0x62, 0x78, + 0x2e, 0x43, 0x72, 0x75, 0x64, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x17, 0x0a, + 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x0b, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, + 0x74, 0x5f, 0x61, 0x63, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x62, + 0x78, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x41, 0x63, 0x73, 0x4d, 0x6f, 0x64, 0x65, + 0x52, 0x0a, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x41, 0x63, 0x73, 0x12, 0x16, 0x0a, 0x06, + 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x70, 0x75, + 0x62, 0x6c, 0x69, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x08, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x22, 0xed, 0x01, 0x0a, 0x11, 0x53, 0x75, 0x62, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x21, + 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x09, + 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x43, 0x72, 0x75, 0x64, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, + 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, + 0x12, 0x15, 0x0a, 0x06, 0x64, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x05, 0x64, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x65, 0x61, 0x64, 0x5f, + 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x72, 0x65, 0x61, 0x64, 0x49, 0x64, + 0x12, 0x17, 0x0a, 0x07, 0x72, 0x65, 0x63, 0x76, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x06, 0x72, 0x65, 0x63, 0x76, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x04, 0x6d, 0x6f, 0x64, + 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x41, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x18, + 0x0a, 0x07, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x07, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x22, 0x54, 0x0a, 0x0c, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x09, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x43, + 0x72, 0x75, 0x64, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x03, 0x6d, + 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x53, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x22, 0x36, + 0x0a, 0x04, 0x41, 0x75, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x16, + 0x0a, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x22, 0x63, 0x0a, 0x08, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x65, + 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x69, 0x6d, 0x65, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x69, 0x6d, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x74, 0x61, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x65, 0x74, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x22, 0x8d, 0x01, 0x0a, 0x09, + 0x46, 0x69, 0x6c, 0x65, 0x55, 0x70, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x04, 0x61, 0x75, 0x74, + 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x41, 0x75, + 0x74, 0x68, 0x52, 0x04, 0x61, 0x75, 0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x70, 0x69, + 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x21, + 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, + 0x62, 0x78, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, + 0x61, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x84, 0x01, 0x0a, 0x0a, + 0x46, 0x69, 0x6c, 0x65, 0x55, 0x70, 0x52, 0x65, 0x73, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, + 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x12, + 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, + 0x78, 0x74, 0x12, 0x21, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0d, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, + 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x64, 0x69, 0x72, 0x5f, 0x75, + 0x72, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x64, 0x69, 0x72, 0x55, + 0x72, 0x6c, 0x22, 0x6f, 0x0a, 0x0b, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, + 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x1d, 0x0a, 0x04, 0x61, 0x75, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x09, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x52, 0x04, 0x61, 0x75, 0x74, 0x68, + 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, + 0x72, 0x69, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x66, 0x5f, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, + 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x66, 0x4d, 0x6f, 0x64, 0x69, 0x66, + 0x69, 0x65, 0x64, 0x22, 0xa0, 0x01, 0x0a, 0x0c, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x6f, 0x77, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x21, 0x0a, 0x04, + 0x6d, 0x65, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x62, 0x78, + 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, + 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x64, 0x69, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x64, 0x69, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x18, 0x0a, 0x07, + 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2a, 0x33, 0x0a, 0x09, 0x41, 0x75, 0x74, 0x68, 0x4c, 0x65, + 0x76, 0x65, 0x6c, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, + 0x04, 0x41, 0x4e, 0x4f, 0x4e, 0x10, 0x0a, 0x12, 0x08, 0x0a, 0x04, 0x41, 0x55, 0x54, 0x48, 0x10, + 0x14, 0x12, 0x08, 0x0a, 0x04, 0x52, 0x4f, 0x4f, 0x54, 0x10, 0x1e, 0x2a, 0x38, 0x0a, 0x08, 0x49, + 0x6e, 0x66, 0x6f, 0x4e, 0x6f, 0x74, 0x65, 0x12, 0x06, 0x0a, 0x02, 0x58, 0x31, 0x10, 0x00, 0x12, + 0x08, 0x0a, 0x04, 0x52, 0x45, 0x41, 0x44, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x52, 0x45, 0x43, + 0x56, 0x10, 0x02, 0x12, 0x06, 0x0a, 0x02, 0x4b, 0x50, 0x10, 0x03, 0x12, 0x08, 0x0a, 0x04, 0x43, + 0x41, 0x4c, 0x4c, 0x10, 0x04, 0x2a, 0x6f, 0x0a, 0x09, 0x43, 0x61, 0x6c, 0x6c, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x58, 0x32, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x41, 0x43, + 0x43, 0x45, 0x50, 0x54, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x41, 0x4e, 0x53, 0x57, 0x45, 0x52, + 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x48, 0x41, 0x4e, 0x47, 0x5f, 0x55, 0x50, 0x10, 0x03, 0x12, + 0x11, 0x0a, 0x0d, 0x49, 0x43, 0x45, 0x5f, 0x43, 0x41, 0x4e, 0x44, 0x49, 0x44, 0x41, 0x54, 0x45, + 0x10, 0x04, 0x12, 0x0a, 0x0a, 0x06, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x10, 0x05, 0x12, 0x09, + 0x0a, 0x05, 0x4f, 0x46, 0x46, 0x45, 0x52, 0x10, 0x06, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x49, 0x4e, + 0x47, 0x49, 0x4e, 0x47, 0x10, 0x07, 0x2a, 0x3c, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x43, 0x6f, + 0x64, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x4f, 0x4e, 0x54, 0x49, 0x4e, 0x55, 0x45, 0x10, 0x00, + 0x12, 0x08, 0x0a, 0x04, 0x44, 0x52, 0x4f, 0x50, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, + 0x53, 0x50, 0x4f, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x50, 0x4c, 0x41, + 0x43, 0x45, 0x10, 0x03, 0x2a, 0x2a, 0x0a, 0x04, 0x43, 0x72, 0x75, 0x64, 0x12, 0x0a, 0x0a, 0x06, + 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x55, 0x50, 0x44, 0x41, + 0x54, 0x45, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x02, + 0x32, 0xaf, 0x01, 0x0a, 0x04, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x33, 0x0a, 0x0b, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x6f, 0x70, 0x12, 0x0e, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x73, 0x67, 0x1a, 0x0e, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x53, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x73, 0x67, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, 0x37, + 0x0a, 0x10, 0x4c, 0x61, 0x72, 0x67, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, + 0x76, 0x65, 0x12, 0x0e, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x55, 0x70, 0x52, + 0x65, 0x71, 0x1a, 0x0f, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x55, 0x70, 0x52, + 0x65, 0x73, 0x70, 0x22, 0x00, 0x28, 0x01, 0x12, 0x39, 0x0a, 0x0e, 0x4c, 0x61, 0x72, 0x67, 0x65, + 0x46, 0x69, 0x6c, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x12, 0x10, 0x2e, 0x70, 0x62, 0x78, 0x2e, + 0x46, 0x69, 0x6c, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, + 0x78, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, + 0x30, 0x01, 0x32, 0x9f, 0x02, 0x0a, 0x06, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x12, 0x2d, 0x0a, + 0x08, 0x46, 0x69, 0x72, 0x65, 0x48, 0x6f, 0x73, 0x65, 0x12, 0x0e, 0x2e, 0x70, 0x62, 0x78, 0x2e, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x0f, 0x2e, 0x70, 0x62, 0x78, 0x2e, + 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x2c, 0x0a, 0x04, + 0x46, 0x69, 0x6e, 0x64, 0x12, 0x10, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x1a, 0x10, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x53, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x22, 0x00, 0x12, 0x2b, 0x0a, 0x07, 0x41, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x11, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x41, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x1a, 0x0b, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x55, + 0x6e, 0x75, 0x73, 0x65, 0x64, 0x22, 0x00, 0x12, 0x27, 0x0a, 0x05, 0x54, 0x6f, 0x70, 0x69, 0x63, + 0x12, 0x0f, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x1a, 0x0b, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x55, 0x6e, 0x75, 0x73, 0x65, 0x64, 0x22, 0x00, + 0x12, 0x35, 0x0a, 0x0c, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x16, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x1a, 0x0b, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x55, + 0x6e, 0x75, 0x73, 0x65, 0x64, 0x22, 0x00, 0x12, 0x2b, 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x11, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x1a, 0x0b, 0x2e, 0x70, 0x62, 0x78, 0x2e, 0x55, 0x6e, 0x75, 0x73, + 0x65, 0x64, 0x22, 0x00, 0x42, 0x1c, 0x5a, 0x1a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x63, 0x68, 0x61, 0x74, 0x2f, 0x70, + 0x62, 0x78, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_model_proto_rawDescOnce sync.Once + file_model_proto_rawDescData = file_model_proto_rawDesc +) + +func file_model_proto_rawDescGZIP() []byte { + file_model_proto_rawDescOnce.Do(func() { + file_model_proto_rawDescData = protoimpl.X.CompressGZIP(file_model_proto_rawDescData) + }) + return file_model_proto_rawDescData +} + +var file_model_proto_enumTypes = make([]protoimpl.EnumInfo, 7) +var file_model_proto_msgTypes = make([]protoimpl.MessageInfo, 53) +var file_model_proto_goTypes = []interface{}{ + (AuthLevel)(0), // 0: pbx.AuthLevel + (InfoNote)(0), // 1: pbx.InfoNote + (CallEvent)(0), // 2: pbx.CallEvent + (RespCode)(0), // 3: pbx.RespCode + (Crud)(0), // 4: pbx.Crud + (ClientDel_What)(0), // 5: pbx.ClientDel.What + (ServerPres_What)(0), // 6: pbx.ServerPres.What + (*Unused)(nil), // 7: pbx.Unused + (*DefaultAcsMode)(nil), // 8: pbx.DefaultAcsMode + (*AccessMode)(nil), // 9: pbx.AccessMode + (*SetSub)(nil), // 10: pbx.SetSub + (*ClientCred)(nil), // 11: pbx.ClientCred + (*SetDesc)(nil), // 12: pbx.SetDesc + (*SeqRange)(nil), // 13: pbx.SeqRange + (*GetOpts)(nil), // 14: pbx.GetOpts + (*GetQuery)(nil), // 15: pbx.GetQuery + (*SetQuery)(nil), // 16: pbx.SetQuery + (*ClientHi)(nil), // 17: pbx.ClientHi + (*ClientAcc)(nil), // 18: pbx.ClientAcc + (*ClientLogin)(nil), // 19: pbx.ClientLogin + (*ClientSub)(nil), // 20: pbx.ClientSub + (*ClientLeave)(nil), // 21: pbx.ClientLeave + (*ClientPub)(nil), // 22: pbx.ClientPub + (*ClientGet)(nil), // 23: pbx.ClientGet + (*ClientSet)(nil), // 24: pbx.ClientSet + (*ClientDel)(nil), // 25: pbx.ClientDel + (*ClientNote)(nil), // 26: pbx.ClientNote + (*ClientExtra)(nil), // 27: pbx.ClientExtra + (*ClientMsg)(nil), // 28: pbx.ClientMsg + (*ServerCred)(nil), // 29: pbx.ServerCred + (*TopicDesc)(nil), // 30: pbx.TopicDesc + (*TopicSub)(nil), // 31: pbx.TopicSub + (*DelValues)(nil), // 32: pbx.DelValues + (*ServerCtrl)(nil), // 33: pbx.ServerCtrl + (*ServerData)(nil), // 34: pbx.ServerData + (*ServerPres)(nil), // 35: pbx.ServerPres + (*ServerMeta)(nil), // 36: pbx.ServerMeta + (*ServerInfo)(nil), // 37: pbx.ServerInfo + (*ServerMsg)(nil), // 38: pbx.ServerMsg + (*ServerResp)(nil), // 39: pbx.ServerResp + (*Session)(nil), // 40: pbx.Session + (*ClientReq)(nil), // 41: pbx.ClientReq + (*SearchQuery)(nil), // 42: pbx.SearchQuery + (*SearchFound)(nil), // 43: pbx.SearchFound + (*TopicEvent)(nil), // 44: pbx.TopicEvent + (*AccountEvent)(nil), // 45: pbx.AccountEvent + (*SubscriptionEvent)(nil), // 46: pbx.SubscriptionEvent + (*MessageEvent)(nil), // 47: pbx.MessageEvent + (*Auth)(nil), // 48: pbx.Auth + (*FileMeta)(nil), // 49: pbx.FileMeta + (*FileUpReq)(nil), // 50: pbx.FileUpReq + (*FileUpResp)(nil), // 51: pbx.FileUpResp + (*FileDownReq)(nil), // 52: pbx.FileDownReq + (*FileDownResp)(nil), // 53: pbx.FileDownResp + nil, // 54: pbx.ClientCred.ParamsEntry + nil, // 55: pbx.SetQuery.AuxEntry + nil, // 56: pbx.ClientPub.HeadEntry + nil, // 57: pbx.ServerCtrl.ParamsEntry + nil, // 58: pbx.ServerData.HeadEntry + nil, // 59: pbx.ServerMeta.AuxEntry +} +var file_model_proto_depIdxs = []int32{ + 54, // 0: pbx.ClientCred.params:type_name -> pbx.ClientCred.ParamsEntry + 8, // 1: pbx.SetDesc.default_acs:type_name -> pbx.DefaultAcsMode + 13, // 2: pbx.GetOpts.ranges:type_name -> pbx.SeqRange + 14, // 3: pbx.GetQuery.desc:type_name -> pbx.GetOpts + 14, // 4: pbx.GetQuery.sub:type_name -> pbx.GetOpts + 14, // 5: pbx.GetQuery.data:type_name -> pbx.GetOpts + 12, // 6: pbx.SetQuery.desc:type_name -> pbx.SetDesc + 10, // 7: pbx.SetQuery.sub:type_name -> pbx.SetSub + 11, // 8: pbx.SetQuery.cred:type_name -> pbx.ClientCred + 55, // 9: pbx.SetQuery.aux:type_name -> pbx.SetQuery.AuxEntry + 12, // 10: pbx.ClientAcc.desc:type_name -> pbx.SetDesc + 11, // 11: pbx.ClientAcc.cred:type_name -> pbx.ClientCred + 0, // 12: pbx.ClientAcc.auth_level:type_name -> pbx.AuthLevel + 11, // 13: pbx.ClientLogin.cred:type_name -> pbx.ClientCred + 16, // 14: pbx.ClientSub.set_query:type_name -> pbx.SetQuery + 15, // 15: pbx.ClientSub.get_query:type_name -> pbx.GetQuery + 56, // 16: pbx.ClientPub.head:type_name -> pbx.ClientPub.HeadEntry + 15, // 17: pbx.ClientGet.query:type_name -> pbx.GetQuery + 16, // 18: pbx.ClientSet.query:type_name -> pbx.SetQuery + 5, // 19: pbx.ClientDel.what:type_name -> pbx.ClientDel.What + 13, // 20: pbx.ClientDel.del_seq:type_name -> pbx.SeqRange + 11, // 21: pbx.ClientDel.cred:type_name -> pbx.ClientCred + 1, // 22: pbx.ClientNote.what:type_name -> pbx.InfoNote + 2, // 23: pbx.ClientNote.event:type_name -> pbx.CallEvent + 0, // 24: pbx.ClientExtra.auth_level:type_name -> pbx.AuthLevel + 17, // 25: pbx.ClientMsg.hi:type_name -> pbx.ClientHi + 18, // 26: pbx.ClientMsg.acc:type_name -> pbx.ClientAcc + 19, // 27: pbx.ClientMsg.login:type_name -> pbx.ClientLogin + 20, // 28: pbx.ClientMsg.sub:type_name -> pbx.ClientSub + 21, // 29: pbx.ClientMsg.leave:type_name -> pbx.ClientLeave + 22, // 30: pbx.ClientMsg.pub:type_name -> pbx.ClientPub + 23, // 31: pbx.ClientMsg.get:type_name -> pbx.ClientGet + 24, // 32: pbx.ClientMsg.set:type_name -> pbx.ClientSet + 25, // 33: pbx.ClientMsg.del:type_name -> pbx.ClientDel + 26, // 34: pbx.ClientMsg.note:type_name -> pbx.ClientNote + 27, // 35: pbx.ClientMsg.extra:type_name -> pbx.ClientExtra + 8, // 36: pbx.TopicDesc.defacs:type_name -> pbx.DefaultAcsMode + 9, // 37: pbx.TopicDesc.acs:type_name -> pbx.AccessMode + 9, // 38: pbx.TopicSub.acs:type_name -> pbx.AccessMode + 13, // 39: pbx.DelValues.del_seq:type_name -> pbx.SeqRange + 57, // 40: pbx.ServerCtrl.params:type_name -> pbx.ServerCtrl.ParamsEntry + 58, // 41: pbx.ServerData.head:type_name -> pbx.ServerData.HeadEntry + 6, // 42: pbx.ServerPres.what:type_name -> pbx.ServerPres.What + 13, // 43: pbx.ServerPres.del_seq:type_name -> pbx.SeqRange + 9, // 44: pbx.ServerPres.acs:type_name -> pbx.AccessMode + 30, // 45: pbx.ServerMeta.desc:type_name -> pbx.TopicDesc + 31, // 46: pbx.ServerMeta.sub:type_name -> pbx.TopicSub + 32, // 47: pbx.ServerMeta.del:type_name -> pbx.DelValues + 29, // 48: pbx.ServerMeta.cred:type_name -> pbx.ServerCred + 59, // 49: pbx.ServerMeta.aux:type_name -> pbx.ServerMeta.AuxEntry + 1, // 50: pbx.ServerInfo.what:type_name -> pbx.InfoNote + 2, // 51: pbx.ServerInfo.event:type_name -> pbx.CallEvent + 33, // 52: pbx.ServerMsg.ctrl:type_name -> pbx.ServerCtrl + 34, // 53: pbx.ServerMsg.data:type_name -> pbx.ServerData + 35, // 54: pbx.ServerMsg.pres:type_name -> pbx.ServerPres + 36, // 55: pbx.ServerMsg.meta:type_name -> pbx.ServerMeta + 37, // 56: pbx.ServerMsg.info:type_name -> pbx.ServerInfo + 3, // 57: pbx.ServerResp.status:type_name -> pbx.RespCode + 38, // 58: pbx.ServerResp.srvmsg:type_name -> pbx.ServerMsg + 28, // 59: pbx.ServerResp.clmsg:type_name -> pbx.ClientMsg + 0, // 60: pbx.Session.auth_level:type_name -> pbx.AuthLevel + 28, // 61: pbx.ClientReq.msg:type_name -> pbx.ClientMsg + 40, // 62: pbx.ClientReq.sess:type_name -> pbx.Session + 3, // 63: pbx.SearchFound.status:type_name -> pbx.RespCode + 31, // 64: pbx.SearchFound.result:type_name -> pbx.TopicSub + 4, // 65: pbx.TopicEvent.action:type_name -> pbx.Crud + 30, // 66: pbx.TopicEvent.desc:type_name -> pbx.TopicDesc + 4, // 67: pbx.AccountEvent.action:type_name -> pbx.Crud + 8, // 68: pbx.AccountEvent.default_acs:type_name -> pbx.DefaultAcsMode + 4, // 69: pbx.SubscriptionEvent.action:type_name -> pbx.Crud + 9, // 70: pbx.SubscriptionEvent.mode:type_name -> pbx.AccessMode + 4, // 71: pbx.MessageEvent.action:type_name -> pbx.Crud + 34, // 72: pbx.MessageEvent.msg:type_name -> pbx.ServerData + 48, // 73: pbx.FileUpReq.auth:type_name -> pbx.Auth + 49, // 74: pbx.FileUpReq.meta:type_name -> pbx.FileMeta + 49, // 75: pbx.FileUpResp.meta:type_name -> pbx.FileMeta + 48, // 76: pbx.FileDownReq.auth:type_name -> pbx.Auth + 49, // 77: pbx.FileDownResp.meta:type_name -> pbx.FileMeta + 28, // 78: pbx.Node.MessageLoop:input_type -> pbx.ClientMsg + 50, // 79: pbx.Node.LargeFileReceive:input_type -> pbx.FileUpReq + 52, // 80: pbx.Node.LargeFileServe:input_type -> pbx.FileDownReq + 41, // 81: pbx.Plugin.FireHose:input_type -> pbx.ClientReq + 42, // 82: pbx.Plugin.Find:input_type -> pbx.SearchQuery + 45, // 83: pbx.Plugin.Account:input_type -> pbx.AccountEvent + 44, // 84: pbx.Plugin.Topic:input_type -> pbx.TopicEvent + 46, // 85: pbx.Plugin.Subscription:input_type -> pbx.SubscriptionEvent + 47, // 86: pbx.Plugin.Message:input_type -> pbx.MessageEvent + 38, // 87: pbx.Node.MessageLoop:output_type -> pbx.ServerMsg + 51, // 88: pbx.Node.LargeFileReceive:output_type -> pbx.FileUpResp + 53, // 89: pbx.Node.LargeFileServe:output_type -> pbx.FileDownResp + 39, // 90: pbx.Plugin.FireHose:output_type -> pbx.ServerResp + 43, // 91: pbx.Plugin.Find:output_type -> pbx.SearchFound + 7, // 92: pbx.Plugin.Account:output_type -> pbx.Unused + 7, // 93: pbx.Plugin.Topic:output_type -> pbx.Unused + 7, // 94: pbx.Plugin.Subscription:output_type -> pbx.Unused + 7, // 95: pbx.Plugin.Message:output_type -> pbx.Unused + 87, // [87:96] is the sub-list for method output_type + 78, // [78:87] is the sub-list for method input_type + 78, // [78:78] is the sub-list for extension type_name + 78, // [78:78] is the sub-list for extension extendee + 0, // [0:78] is the sub-list for field type_name +} + +func init() { file_model_proto_init() } +func file_model_proto_init() { + if File_model_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_model_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Unused); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_model_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DefaultAcsMode); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_model_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AccessMode); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_model_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SetSub); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_model_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClientCred); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_model_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SetDesc); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_model_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SeqRange); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_model_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetOpts); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_model_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetQuery); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_model_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SetQuery); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_model_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClientHi); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_model_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClientAcc); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_model_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClientLogin); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_model_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClientSub); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_model_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClientLeave); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_model_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClientPub); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_model_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClientGet); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_model_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClientSet); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_model_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClientDel); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_model_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClientNote); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_model_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClientExtra); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_model_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClientMsg); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_model_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ServerCred); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_model_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TopicDesc); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_model_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TopicSub); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_model_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DelValues); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_model_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ServerCtrl); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_model_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ServerData); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_model_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ServerPres); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_model_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ServerMeta); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_model_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ServerInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_model_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ServerMsg); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_model_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ServerResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_model_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Session); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_model_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClientReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_model_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SearchQuery); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_model_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SearchFound); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_model_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TopicEvent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_model_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AccountEvent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_model_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SubscriptionEvent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_model_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MessageEvent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_model_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Auth); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_model_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FileMeta); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_model_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FileUpReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_model_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FileUpResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_model_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FileDownReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_model_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FileDownResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_model_proto_msgTypes[21].OneofWrappers = []interface{}{ + (*ClientMsg_Hi)(nil), + (*ClientMsg_Acc)(nil), + (*ClientMsg_Login)(nil), + (*ClientMsg_Sub)(nil), + (*ClientMsg_Leave)(nil), + (*ClientMsg_Pub)(nil), + (*ClientMsg_Get)(nil), + (*ClientMsg_Set)(nil), + (*ClientMsg_Del)(nil), + (*ClientMsg_Note)(nil), + } + file_model_proto_msgTypes[31].OneofWrappers = []interface{}{ + (*ServerMsg_Ctrl)(nil), + (*ServerMsg_Data)(nil), + (*ServerMsg_Pres)(nil), + (*ServerMsg_Meta)(nil), + (*ServerMsg_Info)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_model_proto_rawDesc, + NumEnums: 7, + NumMessages: 53, + NumExtensions: 0, + NumServices: 2, + }, + GoTypes: file_model_proto_goTypes, + DependencyIndexes: file_model_proto_depIdxs, + EnumInfos: file_model_proto_enumTypes, + MessageInfos: file_model_proto_msgTypes, + }.Build() + File_model_proto = out.File + file_model_proto_rawDesc = nil + file_model_proto_goTypes = nil + file_model_proto_depIdxs = nil +} diff --git a/pbx/model.proto b/pbx/model.proto index e69de29..6b9b196 100644 --- a/pbx/model.proto +++ b/pbx/model.proto @@ -0,0 +1,660 @@ +syntax = "proto3"; +package pbx; +option go_package = "github.com/tinode/chat/pbx"; + +// This is the methods that needs to be implemented by a gRPC client. +service Node { + // Client sends a stream of ClientMsg, server responds with a stream of ServerMsg + rpc MessageLoop(stream ClientMsg) returns (stream ServerMsg) {} + + // Large file upload: a request with a stream of chunks. + rpc LargeFileReceive(stream FileUpReq) returns (FileUpResp) {} + + // Large file file download: a response with a stream of chunks. + rpc LargeFileServe(FileDownReq) returns (stream FileDownResp) {} +} + +// Plugin interface. +service Plugin { + // This plugin method is called by Tinode server for every message received from the clients. The + // method returns a ServerResp message. ServerResp.status tells Tinode server what to do next. + // See possible values for ServerResp.status in RespCode below. + rpc FireHose(ClientReq) returns (ServerResp) {} + + // An alteranative user and topic discovery mechanism. + // A search request issued on a 'fnd' topic. This method is called to generate an alternative result set. + rpc Find(SearchQuery) returns (SearchFound) {} + + // The following methods are for the Tinode server to report individual events. + + // Account created, updated or deleted + rpc Account(AccountEvent) returns (Unused) {} + + // Topic created, updated [or deleted -- not supported yet] + rpc Topic(TopicEvent) returns (Unused) {} + + // Subscription created, updated or deleted + rpc Subscription(SubscriptionEvent) returns (Unused) {} + + // Message published or deleted + rpc Message(MessageEvent) returns (Unused) {} +} + +// Dummy placeholder message. +message Unused { +} + +// Common client/server messages + +// Authentication level +enum AuthLevel { + NONE = 0; + ANON = 10; + AUTH = 20; + ROOT = 30; +} + +// Client messages + +// Topic default access mode +message DefaultAcsMode { + string auth = 1; + string anon = 2; +} + +// Actual access mode +message AccessMode { + // Access mode requested by the user + string want = 1; + // Access mode granted to the user by the admin + string given = 2; +} + +// SetSub: payload in set.sub request to update current subscription or invite another user, {sub.what} == "sub" +message SetSub { + // User affected by this request. Default (empty): current user + string user_id = 1; + + // Access mode change, either Given or Want depending on context + string mode = 2; +} + +// Credentials such as email or phone number +message ClientCred { + // Credential type, i.e. `email` or `tel`. + string method = 1; + // Value to verify, i.e. `user@example.com` or `+18003287448` + string value = 2; + // Verification response + string response = 3; + // Request parameters, such as preferences or country code. + map