mirror of
https://github.com/openziti/ziti.git
synced 2026-10-23 12:15:35 +00:00
+10
-5
@@ -1,7 +1,12 @@
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: gomod
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: daily
|
||||
open-pull-requests-limit: 10
|
||||
- package-ecosystem: gomod
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: daily
|
||||
open-pull-requests-limit: 10
|
||||
- package-ecosystem: github-actions
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: weekly
|
||||
open-pull-requests-limit: 10
|
||||
|
||||
@@ -42,7 +42,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
|
||||
@@ -22,7 +22,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout ziti
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
path: ziti
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ jobs:
|
||||
with:
|
||||
go-version: '1.21.x'
|
||||
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: golangci-lint
|
||||
uses: golangci/golangci-lint-action@v3
|
||||
|
||||
@@ -39,7 +39,7 @@ jobs:
|
||||
runs-on: macos-11
|
||||
steps:
|
||||
- name: Git Checkout
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
@@ -57,6 +57,7 @@ jobs:
|
||||
go install github.com/mitchellh/gox@latest
|
||||
$(go env GOPATH)/bin/ziti-ci generate-build-info common/version/info_generated.go version
|
||||
$(go env GOPATH)/bin/gox -cgo -os=darwin -arch=amd64 -output=$GOX_OUTPUT ./...
|
||||
$(go env GOPATH)/bin/gox -cgo -os=darwin -arch=arm64 -output=$GOX_OUTPUT ./...
|
||||
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
@@ -72,7 +73,7 @@ jobs:
|
||||
runs-on: windows-2019
|
||||
steps:
|
||||
- name: Git Checkout
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
@@ -103,7 +104,7 @@ jobs:
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- name: Git Checkout
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
@@ -139,7 +140,7 @@ jobs:
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- name: Git Checkout
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
@@ -170,7 +171,7 @@ jobs:
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- name: Git Checkout
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
@@ -293,7 +294,7 @@ jobs:
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- name: Git Checkout
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
@@ -408,7 +409,7 @@ jobs:
|
||||
ZITI_VERSION: ${{ steps.get_version.outputs.ZITI_VERSION }}
|
||||
steps:
|
||||
- name: Git Checkout
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ jobs:
|
||||
ZITI_TUNNEL_IMAGE: ${{ vars.ZITI_TUNNEL_IMAGE || 'docker.io/openziti/ziti-tunnel' }}
|
||||
steps:
|
||||
- name: Checkout Workspace
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Download Linux Release Artifacts
|
||||
uses: actions/download-artifact@v4
|
||||
|
||||
@@ -46,7 +46,7 @@ jobs:
|
||||
ZITI_RPM_PROD_REPO: ${{ vars.ZITI_RPM_PROD_REPO || 'zitipax-openziti-rpm-stable' }}
|
||||
steps:
|
||||
- name: Checkout Workspace
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Download Linux Release Artifacts
|
||||
uses: actions/download-artifact@v4
|
||||
|
||||
@@ -44,7 +44,7 @@ jobs:
|
||||
running-workflow-name: release-quickstart
|
||||
|
||||
- name: Checkout Workspace
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Install Ziti CI
|
||||
uses: openziti/ziti-ci@v1
|
||||
|
||||
@@ -21,7 +21,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Shallow checkout
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Configure Python
|
||||
shell: bash
|
||||
|
||||
@@ -19,15 +19,63 @@ concurrency:
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
compose-test:
|
||||
name: Test Compose Quickstart
|
||||
expressInstallTest:
|
||||
name: Test expressInstall() Quickstart
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Shallow checkout
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Install zsh
|
||||
shell: bash
|
||||
run: sudo apt-get update && sudo apt-get install --yes zsh
|
||||
|
||||
- name: Build and run a quickstart container image
|
||||
shell: bash
|
||||
run: ./quickstart/test/compose-test.zsh
|
||||
|
||||
allInOneTest:
|
||||
name: Test all-in-one Quickstart
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
ZITI_QUICK_TAG: local # override default :latest since we're not pulling from registry
|
||||
ARTIFACTS_DIR: ${{ github.workspace }}/build # output dir for `go build`, input dir for `compose up --build`
|
||||
ZIGGY_UID: 1001 # let container EUID run-as GHA "runner" user to share cache, etc.
|
||||
steps:
|
||||
- name: Shallow checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Install Go
|
||||
id: setup-go
|
||||
uses: actions/setup-go@v4
|
||||
with:
|
||||
go-version-file: ./go.mod
|
||||
|
||||
- name: Build ziti executable
|
||||
shell: bash
|
||||
run: |
|
||||
mkdir -pv ${ARTIFACTS_DIR}
|
||||
go build -o ${ARTIFACTS_DIR} ${GITHUB_WORKSPACE}/...
|
||||
|
||||
- name: Run the all-in-one quickstart with locally-built ziti executable
|
||||
shell: bash
|
||||
working-directory: ./quickstart/docker/all-in-one
|
||||
run: docker compose up --build --detach
|
||||
|
||||
- name: Wait for all-in-one quickstart controller then run quickstart tests
|
||||
shell: bash
|
||||
working-directory: ./quickstart/docker/all-in-one
|
||||
env:
|
||||
ZITI_GO_VERSION: ${{ steps.setup-go.outputs.go-version }}
|
||||
run: docker compose --profile test run --rm quickstart-test
|
||||
|
||||
- name: Print debug info
|
||||
if: always()
|
||||
shell: bash
|
||||
working-directory: ./quickstart/docker/all-in-one
|
||||
run: |
|
||||
set +e
|
||||
set -x
|
||||
id runner
|
||||
ls -lAn ${GOCACHE:-${HOME}/.cache/go-build}/ ${GOPATH:-${HOME}/go}/pkg/mod/
|
||||
docker compose --profile test logs
|
||||
|
||||
@@ -14,7 +14,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Git Checkout
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
|
||||
@@ -1,3 +1,47 @@
|
||||
# Release 0.33.0
|
||||
|
||||
# What's New
|
||||
|
||||
* SDK Terminator stability improvements
|
||||
* Minor feature updates and bug fixes
|
||||
|
||||
## SDK Terminator stability improvements
|
||||
|
||||
This release was focused on creating a chaos test for SDK terminators, running it and fixing any issues found.
|
||||
The test repeatedly and randomly restarts the controller, routers and tunnelers then verifies that terminators
|
||||
end up in the correct state.
|
||||
|
||||
The following tools were also used/added to aid in diagnosing and fixing issues:
|
||||
|
||||
* `ziti fabric validate router-sdk-terminators`
|
||||
* Compares the controller state with the router state
|
||||
* `ziti fabric validate terminators`
|
||||
* Checks each selected terminator to ensure it's still valid on the router and/or sdk
|
||||
* `ziti fabric inspect sdk-terminators`
|
||||
* Allows inspecting each routers terminator state
|
||||
* `ziti fabric inspect router-messaging`
|
||||
* Allows inspecting what the controller has queued for router state sync and terminator validations
|
||||
* `ziti edge validate service-hosting`
|
||||
* Shows how many terminators each identity which can host a service has
|
||||
|
||||
Several changes were made to the terminator code to ensure that terminators are properly created and cleaned up.
|
||||
The routers now use an adaptive rate limiter to control how fast they send terminator related requests to the
|
||||
controller. For this to work properly, the rate limiting on the controller must be enabled, so it can report
|
||||
back to the routers when it's got too much work.
|
||||
|
||||
## Component Updates and Bug Fixes
|
||||
|
||||
* github.com/openziti/edge-api: [v0.26.10 -> v0.26.12](https://github.com/openziti/edge-api/compare/v0.26.10...v0.26.12)
|
||||
* github.com/openziti/ziti: [v0.32.2 -> v0.33.0](https://github.com/openziti/ziti/compare/v0.32.2...v0.33.0)
|
||||
* [Issue #1815](https://github.com/openziti/ziti/issues/1815) - Panic if api session sync failed handler is called twice in the router
|
||||
* [Issue #1794](https://github.com/openziti/ziti/issues/1794) - Add SDK terminator chaos test and fix any bugs found as part of chaos testing
|
||||
* [Issue #1781](https://github.com/openziti/ziti/issues/1781) - Improve performance when adding intercepted services
|
||||
* [Issue #1369](https://github.com/openziti/ziti/issues/1369) - Allow filtering by policy type when listing identities for service or services for identity
|
||||
* [Issue #1791](https://github.com/openziti/ziti/issues/1791) - route dial isn't checking for network timeouts correctly
|
||||
* [Issue #1204](https://github.com/openziti/ziti/issues/1204) - ziti cli identity tags related flags misbehaving
|
||||
* [Issue #987](https://github.com/openziti/ziti/issues/987) - "ziti create config router edge" doesn't know about --tunnelerMode proxy
|
||||
* [Issue #652](https://github.com/openziti/ziti/issues/652) - Update CLI script M1 Support when github actions allows
|
||||
|
||||
# Release 0.32.2
|
||||
|
||||
## What's New
|
||||
@@ -26,6 +70,7 @@
|
||||
* [Issue #1734](https://github.com/openziti/ziti/issues/1734) - Make API rate limiter enabled by default
|
||||
* [Issue #1726](https://github.com/openziti/ziti/issues/1726) - Fix some sdk hosting logging
|
||||
* [Issue #1725](https://github.com/openziti/ziti/issues/1725) - Fix panic in entity event processing
|
||||
* [Issue #652](https://github.com/openziti/ziti/issues/652) - CI support for MacOS arm64
|
||||
|
||||
# Release 0.32.1
|
||||
|
||||
|
||||
@@ -55,6 +55,10 @@ const (
|
||||
CreateCircuitRespCircuitId = 11
|
||||
CreateCircuitRespAddress = 12
|
||||
CreateCircuitRespTagsHeader = 13
|
||||
|
||||
HeaderResultErrorCode = 10
|
||||
|
||||
ResultErrorRateLimited = 1
|
||||
)
|
||||
|
||||
func NewCircuitSuccessMsg(sessionId, address string) *channel.Message {
|
||||
|
||||
@@ -3,6 +3,7 @@ package handler_common
|
||||
import (
|
||||
"github.com/michaelquigley/pfxlog"
|
||||
"github.com/openziti/channel/v2"
|
||||
"github.com/openziti/ziti/common/ctrl_msg"
|
||||
"time"
|
||||
)
|
||||
|
||||
@@ -39,3 +40,20 @@ func SendOpResult(request *channel.Message, ch channel.Channel, op string, messa
|
||||
log.WithError(err).Error("failed to send result")
|
||||
}
|
||||
}
|
||||
|
||||
func SendServerBusy(request *channel.Message, ch channel.Channel, op string) {
|
||||
log := pfxlog.ContextLogger(ch.Label()).WithField("operation", op)
|
||||
log.Errorf("%v error performing %v: (%s)", ch.LogicalName(), op, "server too busy")
|
||||
|
||||
response := channel.NewResult(false, "server too busy")
|
||||
response.ReplyTo(request)
|
||||
response.Headers.PutUint32Header(ctrl_msg.HeaderResultErrorCode, ctrl_msg.ResultErrorRateLimited)
|
||||
if err := response.WithTimeout(5 * time.Second).SendAndWaitForWire(ch); err != nil {
|
||||
log.WithError(err).Error("failed to send result")
|
||||
}
|
||||
}
|
||||
|
||||
func WasRateLimited(msg *channel.Message) bool {
|
||||
val, found := msg.GetUint32Header(ctrl_msg.HeaderResultErrorCode)
|
||||
return found && val == ctrl_msg.ResultErrorRateLimited
|
||||
}
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
Copyright NetFoundry Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
https://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package inspect
|
||||
|
||||
type RouterMessagingState struct {
|
||||
RouterUpdates []*RouterUpdates `json:"routerUpdates"`
|
||||
TerminatorValidations []*TerminatorValidations `json:"terminatorValidations"`
|
||||
}
|
||||
|
||||
type RouterInfo struct {
|
||||
Id string `json:"id"`
|
||||
Name string `json:"name"`
|
||||
}
|
||||
|
||||
type RouterUpdates struct {
|
||||
Router RouterInfo `json:"router"`
|
||||
Version uint32 `json:"version"`
|
||||
ChangedRouters []RouterInfo `json:"changedRouters"`
|
||||
SendInProgress bool `json:"sendInProgress"`
|
||||
}
|
||||
|
||||
type TerminatorValidations struct {
|
||||
Router RouterInfo `json:"router"`
|
||||
Terminators []string `json:"terminators"`
|
||||
CheckInProgress bool `json:"checkInProgress"`
|
||||
LastSend string `json:"lastSend"`
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
Copyright NetFoundry Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
https://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package inspect
|
||||
|
||||
type SdkTerminatorInspectResult struct {
|
||||
Entries []*SdkTerminatorInspectDetail `json:"entries"`
|
||||
Errors []string `json:"errors"`
|
||||
}
|
||||
|
||||
type SdkTerminatorInspectDetail struct {
|
||||
Key string `json:"key"`
|
||||
Id string `json:"id"`
|
||||
State string `json:"state"`
|
||||
Token string `json:"token"`
|
||||
ListenerId string `json:"listenerId"`
|
||||
Instance string `json:"instance"`
|
||||
Cost uint16 `json:"cost"`
|
||||
Precedence string `json:"precedence"`
|
||||
AssignIds bool `json:"assignIds"`
|
||||
V2 bool `json:"v2"`
|
||||
SupportsInspect bool `json:"supportsInspect"`
|
||||
OperationActive bool `json:"establishActive"`
|
||||
CreateTime string `json:"createTime"`
|
||||
LastAttempt string `json:"lastAttempt"`
|
||||
}
|
||||
@@ -923,6 +923,7 @@ type Terminator struct {
|
||||
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
|
||||
Binding string `protobuf:"bytes,2,opt,name=binding,proto3" json:"binding,omitempty"`
|
||||
Address string `protobuf:"bytes,3,opt,name=address,proto3" json:"address,omitempty"`
|
||||
Marker uint64 `protobuf:"varint,4,opt,name=marker,proto3" json:"marker,omitempty"`
|
||||
}
|
||||
|
||||
func (x *Terminator) Reset() {
|
||||
@@ -978,6 +979,13 @@ func (x *Terminator) GetAddress() string {
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *Terminator) GetMarker() uint64 {
|
||||
if x != nil {
|
||||
return x.Marker
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
type ValidateTerminatorsRequest struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
@@ -1088,6 +1096,7 @@ type RouterTerminatorState struct {
|
||||
Valid bool `protobuf:"varint,1,opt,name=valid,proto3" json:"valid,omitempty"`
|
||||
Reason TerminatorInvalidReason `protobuf:"varint,2,opt,name=reason,proto3,enum=ziti.ctrl.pb.TerminatorInvalidReason" json:"reason,omitempty"`
|
||||
Detail string `protobuf:"bytes,3,opt,name=detail,proto3" json:"detail,omitempty"` // inspect info if valid
|
||||
Marker uint64 `protobuf:"varint,4,opt,name=marker,proto3" json:"marker,omitempty"`
|
||||
}
|
||||
|
||||
func (x *RouterTerminatorState) Reset() {
|
||||
@@ -1143,6 +1152,13 @@ func (x *RouterTerminatorState) GetDetail() string {
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *RouterTerminatorState) GetMarker() uint64 {
|
||||
if x != nil {
|
||||
return x.Marker
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
type ValidateTerminatorsV2Response struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
@@ -2647,34 +2663,37 @@ var file_ctrl_proto_rawDesc = []byte{
|
||||
0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
|
||||
0x73, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72,
|
||||
0x49, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x65, 0x72, 0x6d, 0x69,
|
||||
0x6e, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x64, 0x73, 0x22, 0x50, 0x0a, 0x0a, 0x54, 0x65, 0x72, 0x6d,
|
||||
0x6e, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x64, 0x73, 0x22, 0x68, 0x0a, 0x0a, 0x54, 0x65, 0x72, 0x6d,
|
||||
0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
|
||||
0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e,
|
||||
0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67,
|
||||
0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28,
|
||||
0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x58, 0x0a, 0x1a, 0x56, 0x61,
|
||||
0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72,
|
||||
0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3a, 0x0a, 0x0b, 0x74, 0x65, 0x72, 0x6d,
|
||||
0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e,
|
||||
0x7a, 0x69, 0x74, 0x69, 0x2e, 0x63, 0x74, 0x72, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x65, 0x72,
|
||||
0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x0b, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61,
|
||||
0x74, 0x6f, 0x72, 0x73, 0x22, 0x7a, 0x0a, 0x1c, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65,
|
||||
0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x56, 0x32, 0x52, 0x65, 0x71,
|
||||
0x75, 0x65, 0x73, 0x74, 0x12, 0x3a, 0x0a, 0x0b, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74,
|
||||
0x6f, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x7a, 0x69, 0x74, 0x69,
|
||||
0x2e, 0x63, 0x74, 0x72, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61,
|
||||
0x74, 0x6f, 0x72, 0x52, 0x0b, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x73,
|
||||
0x12, 0x1e, 0x0a, 0x0a, 0x66, 0x69, 0x78, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x02,
|
||||
0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x66, 0x69, 0x78, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64,
|
||||
0x22, 0x84, 0x01, 0x0a, 0x15, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x54, 0x65, 0x72, 0x6d, 0x69,
|
||||
0x6e, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61,
|
||||
0x6c, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64,
|
||||
0x12, 0x3d, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e,
|
||||
0x32, 0x25, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x63, 0x74, 0x72, 0x6c, 0x2e, 0x70, 0x62, 0x2e,
|
||||
0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69,
|
||||
0x64, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12,
|
||||
0x16, 0x0a, 0x06, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
|
||||
0x06, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x22, 0xd0, 0x01, 0x0a, 0x1d, 0x56, 0x61, 0x6c, 0x69,
|
||||
0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x61,
|
||||
0x72, 0x6b, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6d, 0x61, 0x72, 0x6b,
|
||||
0x65, 0x72, 0x22, 0x58, 0x0a, 0x1a, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65,
|
||||
0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
|
||||
0x12, 0x3a, 0x0a, 0x0b, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x18,
|
||||
0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x63, 0x74, 0x72,
|
||||
0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x52,
|
||||
0x0b, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x22, 0x7a, 0x0a, 0x1c,
|
||||
0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74,
|
||||
0x6f, 0x72, 0x73, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3a, 0x0a, 0x0b,
|
||||
0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28,
|
||||
0x0b, 0x32, 0x18, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x63, 0x74, 0x72, 0x6c, 0x2e, 0x70, 0x62,
|
||||
0x2e, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x0b, 0x74, 0x65, 0x72,
|
||||
0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x66, 0x69, 0x78, 0x49,
|
||||
0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x66, 0x69,
|
||||
0x78, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x22, 0x9c, 0x01, 0x0a, 0x15, 0x52, 0x6f, 0x75,
|
||||
0x74, 0x65, 0x72, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61,
|
||||
0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
|
||||
0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x12, 0x3d, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73,
|
||||
0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e,
|
||||
0x63, 0x74, 0x72, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74,
|
||||
0x6f, 0x72, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x52,
|
||||
0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x65, 0x74, 0x61, 0x69,
|
||||
0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12,
|
||||
0x16, 0x0a, 0x06, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52,
|
||||
0x06, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x22, 0xd0, 0x01, 0x0a, 0x1d, 0x56, 0x61, 0x6c, 0x69,
|
||||
0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x56,
|
||||
0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x06, 0x73, 0x74, 0x61,
|
||||
0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x7a, 0x69, 0x74, 0x69,
|
||||
|
||||
@@ -109,6 +109,7 @@ message Terminator {
|
||||
string id = 1;
|
||||
string binding = 2;
|
||||
string address = 3;
|
||||
uint64 marker = 4;
|
||||
}
|
||||
|
||||
message ValidateTerminatorsRequest {
|
||||
@@ -130,6 +131,7 @@ message RouterTerminatorState {
|
||||
bool valid = 1;
|
||||
TerminatorInvalidReason reason = 2;
|
||||
string detail = 3; // inspect info if valid
|
||||
uint64 marker = 4;
|
||||
}
|
||||
|
||||
message ValidateTerminatorsV2Response {
|
||||
|
||||
@@ -3466,6 +3466,8 @@ type Identity_EnvInfo struct {
|
||||
Os string `protobuf:"bytes,2,opt,name=Os,proto3" json:"Os,omitempty"`
|
||||
OsRelease string `protobuf:"bytes,3,opt,name=OsRelease,proto3" json:"OsRelease,omitempty"`
|
||||
OsVersion string `protobuf:"bytes,4,opt,name=OsVersion,proto3" json:"OsVersion,omitempty"`
|
||||
Domain string `protobuf:"bytes,5,opt,name=Domain,proto3" json:"Domain,omitempty"`
|
||||
Hostname string `protobuf:"bytes,6,opt,name=Hostname,proto3" json:"Hostname,omitempty"`
|
||||
}
|
||||
|
||||
func (x *Identity_EnvInfo) Reset() {
|
||||
@@ -3528,6 +3530,20 @@ func (x *Identity_EnvInfo) GetOsVersion() string {
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *Identity_EnvInfo) GetDomain() string {
|
||||
if x != nil {
|
||||
return x.Domain
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *Identity_EnvInfo) GetHostname() string {
|
||||
if x != nil {
|
||||
return x.Hostname
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
type Identity_SdkInfo struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
@@ -4512,7 +4528,7 @@ var file_edge_cmd_proto_rawDesc = []byte{
|
||||
0x61, 0x69, 0x6d, 0x73, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x42, 0x09, 0x0a, 0x07,
|
||||
0x5f, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x61, 0x75, 0x64, 0x69,
|
||||
0x65, 0x6e, 0x63, 0x65, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x66, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70,
|
||||
0x72, 0x69, 0x6e, 0x74, 0x22, 0x95, 0x0c, 0x0a, 0x08, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74,
|
||||
0x72, 0x69, 0x6e, 0x74, 0x22, 0xca, 0x0c, 0x0a, 0x08, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74,
|
||||
0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69,
|
||||
0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
|
||||
0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x03, 0x20,
|
||||
@@ -4573,323 +4589,326 @@ var file_edge_cmd_proto_rawDesc = []byte{
|
||||
0x6e, 0x74, 0x69, 0x6c, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f,
|
||||
0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d,
|
||||
0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x48, 0x04, 0x52, 0x0d, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c,
|
||||
0x65, 0x64, 0x55, 0x6e, 0x74, 0x69, 0x6c, 0x88, 0x01, 0x01, 0x1a, 0x69, 0x0a, 0x07, 0x45, 0x6e,
|
||||
0x76, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x41, 0x72, 0x63, 0x68, 0x18, 0x01, 0x20,
|
||||
0x01, 0x28, 0x09, 0x52, 0x04, 0x41, 0x72, 0x63, 0x68, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x73, 0x18,
|
||||
0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x4f, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x4f, 0x73, 0x52,
|
||||
0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x4f, 0x73,
|
||||
0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x4f, 0x73, 0x56, 0x65, 0x72,
|
||||
0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x4f, 0x73, 0x56, 0x65,
|
||||
0x72, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0xa1, 0x01, 0x0a, 0x07, 0x53, 0x64, 0x6b, 0x49, 0x6e, 0x66,
|
||||
0x6f, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x70, 0x70, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
|
||||
0x52, 0x05, 0x41, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x41, 0x70, 0x70, 0x56, 0x65,
|
||||
0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x41, 0x70, 0x70,
|
||||
0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x42, 0x72, 0x61, 0x6e, 0x63,
|
||||
0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x12,
|
||||
0x1a, 0x0a, 0x08, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28,
|
||||
0x09, 0x52, 0x08, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x54,
|
||||
0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12,
|
||||
0x18, 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09,
|
||||
0x52, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0x53, 0x0a, 0x09, 0x54, 0x61, 0x67,
|
||||
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, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75,
|
||||
0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65,
|
||||
0x64, 0x67, 0x65, 0x5f, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x61, 0x67, 0x56, 0x61,
|
||||
0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x4c,
|
||||
0x0a, 0x1e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67,
|
||||
0x50, 0x72, 0x65, 0x63, 0x65, 0x64, 0x65, 0x6e, 0x63, 0x65, 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,
|
||||
0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x46, 0x0a, 0x18,
|
||||
0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x43, 0x6f,
|
||||
0x73, 0x74, 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, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
|
||||
0x3a, 0x02, 0x38, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x65, 0x6e, 0x76, 0x49, 0x6e, 0x66, 0x6f,
|
||||
0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x73, 0x64, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x0d, 0x0a, 0x0b,
|
||||
0x5f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x64, 0x42, 0x0d, 0x0a, 0x0b, 0x5f,
|
||||
0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x41, 0x74, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x64,
|
||||
0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x55, 0x6e, 0x74, 0x69, 0x6c, 0x22, 0xcd, 0x01, 0x0a,
|
||||
0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x57,
|
||||
0x69, 0x74, 0x68, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x43, 0x6d,
|
||||
0x64, 0x12, 0x36, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20,
|
||||
0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f,
|
||||
0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52,
|
||||
0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x3e, 0x0a, 0x0b, 0x65, 0x6e, 0x72,
|
||||
0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c,
|
||||
0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x6d, 0x64, 0x2e, 0x70,
|
||||
0x62, 0x2e, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0b, 0x65, 0x6e,
|
||||
0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x31, 0x0a, 0x03, 0x63, 0x74, 0x78,
|
||||
0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64,
|
||||
0x67, 0x65, 0x5f, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65,
|
||||
0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x03, 0x63, 0x74, 0x78, 0x22, 0x9d, 0x02, 0x0a,
|
||||
0x03, 0x4d, 0x66, 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
|
||||
0x52, 0x02, 0x69, 0x64, 0x12, 0x33, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x02, 0x20, 0x03,
|
||||
0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63,
|
||||
0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x66, 0x61, 0x2e, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e,
|
||||
0x74, 0x72, 0x79, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x73, 0x56,
|
||||
0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69,
|
||||
0x73, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x64, 0x65,
|
||||
0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69,
|
||||
0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x63,
|
||||
0x72, 0x65, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65,
|
||||
0x74, 0x12, 0x24, 0x0a, 0x0d, 0x72, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x64,
|
||||
0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x65, 0x63, 0x6f, 0x76, 0x65,
|
||||
0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x1a, 0x53, 0x0a, 0x09, 0x54, 0x61, 0x67, 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, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
|
||||
0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67,
|
||||
0x65, 0x5f, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x61, 0x67, 0x56, 0x61, 0x6c, 0x75,
|
||||
0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa0, 0x0a, 0x0a,
|
||||
0x0c, 0x50, 0x6f, 0x73, 0x74, 0x75, 0x72, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x0e, 0x0a,
|
||||
0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a,
|
||||
0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d,
|
||||
0x65, 0x12, 0x3c, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32,
|
||||
0x28, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x6d, 0x64, 0x2e,
|
||||
0x70, 0x62, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x75, 0x72, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x2e,
|
||||
0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12,
|
||||
0x16, 0x0a, 0x06, 0x74, 0x79, 0x70, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52,
|
||||
0x06, 0x74, 0x79, 0x70, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69,
|
||||
0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f,
|
||||
0x6e, 0x12, 0x26, 0x0a, 0x0e, 0x72, 0x6f, 0x6c, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
|
||||
0x74, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x6f, 0x6c, 0x65, 0x41,
|
||||
0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x36, 0x0a, 0x03, 0x6d, 0x61, 0x63,
|
||||
0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64,
|
||||
0x67, 0x65, 0x5f, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x75, 0x72,
|
||||
0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x2e, 0x4d, 0x61, 0x63, 0x48, 0x00, 0x52, 0x03, 0x6d, 0x61,
|
||||
0x63, 0x12, 0x36, 0x0a, 0x03, 0x6d, 0x66, 0x61, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22,
|
||||
0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x6d, 0x64, 0x2e, 0x70,
|
||||
0x62, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x75, 0x72, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x2e, 0x4d,
|
||||
0x66, 0x61, 0x48, 0x00, 0x52, 0x03, 0x6d, 0x66, 0x61, 0x12, 0x3f, 0x0a, 0x06, 0x6f, 0x73, 0x4c,
|
||||
0x69, 0x73, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x7a, 0x69, 0x74, 0x69,
|
||||
0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x73,
|
||||
0x74, 0x75, 0x72, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x2e, 0x4f, 0x73, 0x4c, 0x69, 0x73, 0x74,
|
||||
0x48, 0x00, 0x52, 0x06, 0x6f, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x07, 0x70, 0x72,
|
||||
0x6f, 0x63, 0x65, 0x73, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x7a, 0x69,
|
||||
0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x50,
|
||||
0x6f, 0x73, 0x74, 0x75, 0x72, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x2e, 0x50, 0x72, 0x6f, 0x63,
|
||||
0x65, 0x73, 0x73, 0x48, 0x00, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x12, 0x51,
|
||||
0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x18, 0x0b,
|
||||
0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65,
|
||||
0x5f, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x75, 0x72, 0x65, 0x43,
|
||||
0x68, 0x65, 0x63, 0x6b, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x75, 0x6c, 0x74,
|
||||
0x69, 0x48, 0x00, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x75, 0x6c, 0x74,
|
||||
0x69, 0x12, 0x42, 0x0a, 0x07, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x18, 0x0c, 0x20, 0x01,
|
||||
0x28, 0x0b, 0x32, 0x26, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63,
|
||||
0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x75, 0x72, 0x65, 0x43, 0x68, 0x65,
|
||||
0x63, 0x6b, 0x2e, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x07, 0x64, 0x6f,
|
||||
0x6d, 0x61, 0x69, 0x6e, 0x73, 0x1a, 0x29, 0x0a, 0x03, 0x4d, 0x61, 0x63, 0x12, 0x22, 0x0a, 0x0c,
|
||||
0x6d, 0x61, 0x63, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03,
|
||||
0x28, 0x09, 0x52, 0x0c, 0x6d, 0x61, 0x63, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73,
|
||||
0x1a, 0xaf, 0x01, 0x0a, 0x03, 0x4d, 0x66, 0x61, 0x12, 0x26, 0x0a, 0x0e, 0x54, 0x69, 0x6d, 0x65,
|
||||
0x6f, 0x75, 0x74, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03,
|
||||
0x52, 0x0e, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73,
|
||||
0x12, 0x22, 0x0a, 0x0c, 0x50, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x4f, 0x6e, 0x57, 0x61, 0x6b, 0x65,
|
||||
0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x50, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x4f, 0x6e,
|
||||
0x57, 0x61, 0x6b, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x50, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x4f, 0x6e,
|
||||
0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x50, 0x72,
|
||||
0x6f, 0x6d, 0x70, 0x74, 0x4f, 0x6e, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x34, 0x0a, 0x15,
|
||||
0x49, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x45, 0x6e, 0x64, 0x70,
|
||||
0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x49, 0x67, 0x6e,
|
||||
0x6f, 0x72, 0x65, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e,
|
||||
0x74, 0x73, 0x1a, 0x3c, 0x0a, 0x02, 0x4f, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x73, 0x54, 0x79,
|
||||
0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x4f, 0x73, 0x54, 0x79, 0x70, 0x65,
|
||||
0x12, 0x1e, 0x0a, 0x0a, 0x4f, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02,
|
||||
0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x4f, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73,
|
||||
0x1a, 0x43, 0x0a, 0x06, 0x4f, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x06, 0x6f, 0x73,
|
||||
0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x7a, 0x69, 0x74,
|
||||
0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x6f,
|
||||
0x73, 0x74, 0x75, 0x72, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x2e, 0x4f, 0x73, 0x52, 0x06, 0x6f,
|
||||
0x73, 0x4c, 0x69, 0x73, 0x74, 0x1a, 0x71, 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73,
|
||||
0x12, 0x16, 0x0a, 0x06, 0x4f, 0x73, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
|
||||
0x52, 0x06, 0x4f, 0x73, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x50, 0x61, 0x74, 0x68,
|
||||
0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x50, 0x61, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06,
|
||||
0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x48, 0x61,
|
||||
0x73, 0x68, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x46, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72,
|
||||
0x69, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x46, 0x69, 0x6e, 0x67,
|
||||
0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x73, 0x1a, 0x70, 0x0a, 0x0c, 0x50, 0x72, 0x6f, 0x63,
|
||||
0x65, 0x73, 0x73, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x6d, 0x61,
|
||||
0x6e, 0x74, 0x69, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x6d, 0x61,
|
||||
0x6e, 0x74, 0x69, 0x63, 0x12, 0x44, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65,
|
||||
0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65,
|
||||
0x64, 0x67, 0x65, 0x5f, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x75,
|
||||
0x72, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52,
|
||||
0x09, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x73, 0x1a, 0x23, 0x0a, 0x07, 0x44, 0x6f,
|
||||
0x6d, 0x61, 0x69, 0x6e, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73,
|
||||
0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x1a,
|
||||
0x53, 0x0a, 0x09, 0x54, 0x61, 0x67, 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, 0x30,
|
||||
0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e,
|
||||
0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62,
|
||||
0x2e, 0x54, 0x61, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
|
||||
0x3a, 0x02, 0x38, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x74, 0x79, 0x70, 0x65, 0x22,
|
||||
0xe7, 0x01, 0x0a, 0x0a, 0x52, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e,
|
||||
0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x38,
|
||||
0x0a, 0x09, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x41, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28,
|
||||
0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||
0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x65,
|
||||
0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x41, 0x74, 0x12, 0x3a, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73,
|
||||
0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64,
|
||||
0x67, 0x65, 0x5f, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x76, 0x6f, 0x63, 0x61,
|
||||
0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04,
|
||||
0x74, 0x61, 0x67, 0x73, 0x1a, 0x53, 0x0a, 0x09, 0x54, 0x61, 0x67, 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, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01,
|
||||
0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63,
|
||||
0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x61, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05,
|
||||
0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xff, 0x02, 0x0a, 0x07, 0x53, 0x65,
|
||||
0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
|
||||
0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20,
|
||||
0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x37, 0x0a, 0x04, 0x74, 0x61, 0x67,
|
||||
0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65,
|
||||
0x64, 0x67, 0x65, 0x5f, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69,
|
||||
0x63, 0x65, 0x2e, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x74, 0x61,
|
||||
0x67, 0x73, 0x12, 0x2e, 0x0a, 0x12, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72,
|
||||
0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12,
|
||||
0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65,
|
||||
0x67, 0x79, 0x12, 0x26, 0x0a, 0x0e, 0x72, 0x6f, 0x6c, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62,
|
||||
0x75, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x6f, 0x6c, 0x65,
|
||||
0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f,
|
||||
0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e,
|
||||
0x66, 0x69, 0x67, 0x73, 0x12, 0x2e, 0x0a, 0x12, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69,
|
||||
0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08,
|
||||
0x52, 0x12, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75,
|
||||
0x69, 0x72, 0x65, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x49, 0x64, 0x6c, 0x65, 0x54,
|
||||
0x69, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x49, 0x64,
|
||||
0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x1a, 0x53, 0x0a, 0x09, 0x54, 0x61, 0x67, 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, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02,
|
||||
0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65,
|
||||
0x5f, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x61, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65,
|
||||
0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xc5, 0x02, 0x0a, 0x17,
|
||||
0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x64, 0x67, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65,
|
||||
0x72, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20,
|
||||
0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18,
|
||||
0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x47, 0x0a, 0x04, 0x74,
|
||||
0x61, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x7a, 0x69, 0x74, 0x69,
|
||||
0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x72,
|
||||
0x76, 0x69, 0x63, 0x65, 0x45, 0x64, 0x67, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x50, 0x6f,
|
||||
0x6c, 0x69, 0x63, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04,
|
||||
0x74, 0x61, 0x67, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63,
|
||||
0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63,
|
||||
0x12, 0x28, 0x0a, 0x0f, 0x65, 0x64, 0x67, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x52, 0x6f,
|
||||
0x6c, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x65, 0x64, 0x67, 0x65, 0x52,
|
||||
0x6f, 0x75, 0x74, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x65,
|
||||
0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09,
|
||||
0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x1a, 0x53,
|
||||
0x65, 0x64, 0x55, 0x6e, 0x74, 0x69, 0x6c, 0x88, 0x01, 0x01, 0x1a, 0x9d, 0x01, 0x0a, 0x07, 0x45,
|
||||
0x6e, 0x76, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x41, 0x72, 0x63, 0x68, 0x18, 0x01,
|
||||
0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x41, 0x72, 0x63, 0x68, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x73,
|
||||
0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x4f, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x4f, 0x73,
|
||||
0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x4f,
|
||||
0x73, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x4f, 0x73, 0x56, 0x65,
|
||||
0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x4f, 0x73, 0x56,
|
||||
0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e,
|
||||
0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x1a,
|
||||
0x0a, 0x08, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09,
|
||||
0x52, 0x08, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x1a, 0xa1, 0x01, 0x0a, 0x07, 0x53,
|
||||
0x64, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x70, 0x70, 0x49, 0x64, 0x18,
|
||||
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x41, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a,
|
||||
0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
|
||||
0x52, 0x0a, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06,
|
||||
0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x42, 0x72,
|
||||
0x61, 0x6e, 0x63, 0x68, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e,
|
||||
0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e,
|
||||
0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
|
||||
0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18,
|
||||
0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0x53,
|
||||
0x0a, 0x09, 0x54, 0x61, 0x67, 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, 0x30, 0x0a,
|
||||
0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x7a,
|
||||
0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e,
|
||||
0x54, 0x61, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a,
|
||||
0x02, 0x38, 0x01, 0x22, 0xfb, 0x02, 0x0a, 0x0d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50,
|
||||
0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
|
||||
0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20,
|
||||
0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3d, 0x0a, 0x04, 0x74, 0x61, 0x67,
|
||||
0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65,
|
||||
0x64, 0x67, 0x65, 0x5f, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69,
|
||||
0x63, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74,
|
||||
0x72, 0x79, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x6d, 0x61,
|
||||
0x6e, 0x74, 0x69, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x6d, 0x61,
|
||||
0x6e, 0x74, 0x69, 0x63, 0x12, 0x24, 0x0a, 0x0d, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79,
|
||||
0x52, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x69, 0x64, 0x65,
|
||||
0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x65,
|
||||
0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09,
|
||||
0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x2c,
|
||||
0x0a, 0x11, 0x70, 0x6f, 0x73, 0x74, 0x75, 0x72, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x6f,
|
||||
0x6c, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x70, 0x6f, 0x73, 0x74, 0x75,
|
||||
0x72, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a,
|
||||
0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x54, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09,
|
||||
0x52, 0x0a, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x54, 0x79, 0x70, 0x65, 0x1a, 0x53, 0x0a, 0x09,
|
||||
0x02, 0x38, 0x01, 0x1a, 0x4c, 0x0a, 0x1e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x48, 0x6f,
|
||||
0x73, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x65, 0x63, 0x65, 0x64, 0x65, 0x6e, 0x63, 0x65, 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, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,
|
||||
0x01, 0x1a, 0x46, 0x0a, 0x18, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x48, 0x6f, 0x73, 0x74,
|
||||
0x69, 0x6e, 0x67, 0x43, 0x6f, 0x73, 0x74, 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, 0x0d, 0x52, 0x05,
|
||||
0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x65, 0x6e,
|
||||
0x76, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x73, 0x64, 0x6b, 0x49, 0x6e, 0x66,
|
||||
0x6f, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x64,
|
||||
0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x41, 0x74, 0x42,
|
||||
0x10, 0x0a, 0x0e, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x55, 0x6e, 0x74, 0x69,
|
||||
0x6c, 0x22, 0xcd, 0x01, 0x0a, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x64, 0x65, 0x6e,
|
||||
0x74, 0x69, 0x74, 0x79, 0x57, 0x69, 0x74, 0x68, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65,
|
||||
0x6e, 0x74, 0x73, 0x43, 0x6d, 0x64, 0x12, 0x36, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69,
|
||||
0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e,
|
||||
0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x49, 0x64, 0x65, 0x6e,
|
||||
0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x3e,
|
||||
0x0a, 0x0b, 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20,
|
||||
0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f,
|
||||
0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e,
|
||||
0x74, 0x52, 0x0b, 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x31,
|
||||
0x0a, 0x03, 0x63, 0x74, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x7a, 0x69,
|
||||
0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x43,
|
||||
0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x03, 0x63, 0x74,
|
||||
0x78, 0x22, 0x9d, 0x02, 0x0a, 0x03, 0x4d, 0x66, 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18,
|
||||
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x33, 0x0a, 0x04, 0x74, 0x61, 0x67,
|
||||
0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65,
|
||||
0x64, 0x67, 0x65, 0x5f, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x66, 0x61, 0x2e, 0x54,
|
||||
0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x1e,
|
||||
0x0a, 0x0a, 0x69, 0x73, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01,
|
||||
0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x12, 0x1e,
|
||||
0x0a, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01,
|
||||
0x28, 0x09, 0x52, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x12, 0x16,
|
||||
0x0a, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
|
||||
0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x72, 0x65, 0x63, 0x6f, 0x76, 0x65,
|
||||
0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x72,
|
||||
0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x1a, 0x53, 0x0a, 0x09,
|
||||
0x54, 0x61, 0x67, 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, 0x30, 0x0a, 0x05, 0x76,
|
||||
0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x7a, 0x69, 0x74,
|
||||
0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x61,
|
||||
0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,
|
||||
0x01, 0x22, 0x8e, 0x04, 0x0a, 0x0d, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x52, 0x6f, 0x75,
|
||||
0x74, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
|
||||
0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
|
||||
0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3d, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18,
|
||||
0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67,
|
||||
0x65, 0x5f, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74,
|
||||
0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79,
|
||||
0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x73, 0x56, 0x65, 0x72, 0x69,
|
||||
0x66, 0x69, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x56, 0x65,
|
||||
0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x12, 0x25, 0x0a, 0x0b, 0x66, 0x69, 0x6e, 0x67, 0x65, 0x72,
|
||||
0x70, 0x72, 0x69, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x66,
|
||||
0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x12, 0x39, 0x0a,
|
||||
0x15, 0x75, 0x6e, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x46, 0x69, 0x6e, 0x67, 0x65,
|
||||
0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x15,
|
||||
0x75, 0x6e, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x46, 0x69, 0x6e, 0x67, 0x65, 0x72,
|
||||
0x70, 0x72, 0x69, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x12, 0x31, 0x0a, 0x11, 0x75, 0x6e, 0x76, 0x65,
|
||||
0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x43, 0x65, 0x72, 0x74, 0x50, 0x65, 0x6d, 0x18, 0x07, 0x20,
|
||||
0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x11, 0x75, 0x6e, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65,
|
||||
0x64, 0x43, 0x65, 0x72, 0x74, 0x50, 0x65, 0x6d, 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, 0x04, 0x63,
|
||||
0x6f, 0x73, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x63, 0x6f, 0x73, 0x74, 0x12,
|
||||
0x20, 0x0a, 0x0b, 0x6e, 0x6f, 0x54, 0x72, 0x61, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x18, 0x09,
|
||||
0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x6e, 0x6f, 0x54, 0x72, 0x61, 0x76, 0x65, 0x72, 0x73, 0x61,
|
||||
0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x0a, 0x20,
|
||||
0x01, 0x28, 0x08, 0x52, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x1a, 0x53, 0x0a,
|
||||
0x09, 0x54, 0x61, 0x67, 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, 0x30, 0x0a, 0x05,
|
||||
0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x7a, 0x69,
|
||||
0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x54,
|
||||
0x61, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02,
|
||||
0x38, 0x01, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x66, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69,
|
||||
0x6e, 0x74, 0x42, 0x18, 0x0a, 0x16, 0x5f, 0x75, 0x6e, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65,
|
||||
0x64, 0x46, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x42, 0x14, 0x0a, 0x12,
|
||||
0x5f, 0x75, 0x6e, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x43, 0x65, 0x72, 0x74, 0x50,
|
||||
0x65, 0x6d, 0x22, 0xc2, 0x01, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x72, 0x61,
|
||||
0x6e, 0x73, 0x69, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x43, 0x6d, 0x64, 0x12, 0x37, 0x0a,
|
||||
0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e,
|
||||
0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62,
|
||||
0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x52, 0x06,
|
||||
0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x12, 0x3c, 0x0a, 0x0a, 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c,
|
||||
0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x7a, 0x69, 0x74,
|
||||
0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6e,
|
||||
0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c,
|
||||
0x6d, 0x65, 0x6e, 0x74, 0x12, 0x31, 0x0a, 0x03, 0x63, 0x74, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28,
|
||||
0x0b, 0x32, 0x1f, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x6d,
|
||||
0x64, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65,
|
||||
0x78, 0x74, 0x52, 0x03, 0x63, 0x74, 0x78, 0x22, 0xaa, 0x02, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61,
|
||||
0x74, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73,
|
||||
0x43, 0x6d, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49,
|
||||
0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74,
|
||||
0x79, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x64, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08,
|
||||
0x52, 0x03, 0x61, 0x64, 0x64, 0x12, 0x5f, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
|
||||
0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e,
|
||||
0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62,
|
||||
0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f,
|
||||
0x6e, 0x66, 0x69, 0x67, 0x73, 0x43, 0x6d, 0x64, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
|
||||
0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43,
|
||||
0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x31, 0x0a, 0x03, 0x63, 0x74, 0x78, 0x18, 0x04, 0x20,
|
||||
0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f,
|
||||
0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e,
|
||||
0x74, 0x65, 0x78, 0x74, 0x52, 0x03, 0x63, 0x74, 0x78, 0x1a, 0x49, 0x0a, 0x0d, 0x53, 0x65, 0x72,
|
||||
0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65,
|
||||
0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73,
|
||||
0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x66,
|
||||
0x69, 0x67, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x66,
|
||||
0x69, 0x67, 0x49, 0x64, 0x2a, 0x80, 0x02, 0x0a, 0x0b, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64,
|
||||
0x54, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x65, 0x72, 0x6f, 0x10, 0x00, 0x12, 0x1d,
|
||||
0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x64, 0x67, 0x65, 0x54, 0x65, 0x72, 0x6d,
|
||||
0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, 0x10, 0xe8, 0x07, 0x12, 0x2b, 0x0a,
|
||||
0x26, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65,
|
||||
0x6e, 0x74, 0x57, 0x69, 0x74, 0x68, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61,
|
||||
0x74, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, 0x10, 0xe9, 0x07, 0x12, 0x19, 0x0a, 0x14, 0x43, 0x72,
|
||||
0x65, 0x61, 0x74, 0x65, 0x45, 0x64, 0x67, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x54, 0x79,
|
||||
0x70, 0x65, 0x10, 0xea, 0x07, 0x12, 0x1c, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54,
|
||||
0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65,
|
||||
0x10, 0xeb, 0x07, 0x12, 0x26, 0x0a, 0x21, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x64, 0x65,
|
||||
0x6e, 0x74, 0x69, 0x74, 0x79, 0x57, 0x69, 0x74, 0x68, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d,
|
||||
0x65, 0x6e, 0x74, 0x73, 0x54, 0x79, 0x70, 0x65, 0x10, 0xec, 0x07, 0x12, 0x1d, 0x0a, 0x18, 0x55,
|
||||
0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66,
|
||||
0x69, 0x67, 0x73, 0x54, 0x79, 0x70, 0x65, 0x10, 0xed, 0x07, 0x12, 0x1b, 0x0a, 0x16, 0x52, 0x65,
|
||||
0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x45, 0x64, 0x67, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72,
|
||||
0x54, 0x79, 0x70, 0x65, 0x10, 0xee, 0x07, 0x42, 0x29, 0x5a, 0x27, 0x67, 0x69, 0x74, 0x68, 0x75,
|
||||
0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x7a, 0x69, 0x74, 0x69, 0x2f, 0x65,
|
||||
0x64, 0x67, 0x65, 0x2f, 0x70, 0x62, 0x2f, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x6d, 0x64, 0x5f,
|
||||
0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
0x01, 0x22, 0xa0, 0x0a, 0x0a, 0x0c, 0x50, 0x6f, 0x73, 0x74, 0x75, 0x72, 0x65, 0x43, 0x68, 0x65,
|
||||
0x63, 0x6b, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02,
|
||||
0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
|
||||
0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3c, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x03,
|
||||
0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65,
|
||||
0x5f, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x75, 0x72, 0x65, 0x43,
|
||||
0x68, 0x65, 0x63, 0x6b, 0x2e, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04,
|
||||
0x74, 0x61, 0x67, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x79, 0x70, 0x65, 0x49, 0x64, 0x18, 0x04,
|
||||
0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x79, 0x70, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07,
|
||||
0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x76,
|
||||
0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x0e, 0x72, 0x6f, 0x6c, 0x65, 0x41, 0x74,
|
||||
0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e,
|
||||
0x72, 0x6f, 0x6c, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x36,
|
||||
0x0a, 0x03, 0x6d, 0x61, 0x63, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x7a, 0x69,
|
||||
0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x50,
|
||||
0x6f, 0x73, 0x74, 0x75, 0x72, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x2e, 0x4d, 0x61, 0x63, 0x48,
|
||||
0x00, 0x52, 0x03, 0x6d, 0x61, 0x63, 0x12, 0x36, 0x0a, 0x03, 0x6d, 0x66, 0x61, 0x18, 0x08, 0x20,
|
||||
0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f,
|
||||
0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x75, 0x72, 0x65, 0x43, 0x68,
|
||||
0x65, 0x63, 0x6b, 0x2e, 0x4d, 0x66, 0x61, 0x48, 0x00, 0x52, 0x03, 0x6d, 0x66, 0x61, 0x12, 0x3f,
|
||||
0x0a, 0x06, 0x6f, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25,
|
||||
0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x6d, 0x64, 0x2e, 0x70,
|
||||
0x62, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x75, 0x72, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x2e, 0x4f,
|
||||
0x73, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12,
|
||||
0x42, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b,
|
||||
0x32, 0x26, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x6d, 0x64,
|
||||
0x2e, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x75, 0x72, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b,
|
||||
0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x48, 0x00, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x63,
|
||||
0x65, 0x73, 0x73, 0x12, 0x51, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x75,
|
||||
0x6c, 0x74, 0x69, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x7a, 0x69, 0x74, 0x69,
|
||||
0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x73,
|
||||
0x74, 0x75, 0x72, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73,
|
||||
0x73, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x48, 0x00, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73,
|
||||
0x73, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x12, 0x42, 0x0a, 0x07, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e,
|
||||
0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65,
|
||||
0x64, 0x67, 0x65, 0x5f, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x75,
|
||||
0x72, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x2e, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x48,
|
||||
0x00, 0x52, 0x07, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x1a, 0x29, 0x0a, 0x03, 0x4d, 0x61,
|
||||
0x63, 0x12, 0x22, 0x0a, 0x0c, 0x6d, 0x61, 0x63, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65,
|
||||
0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x6d, 0x61, 0x63, 0x41, 0x64, 0x64, 0x72,
|
||||
0x65, 0x73, 0x73, 0x65, 0x73, 0x1a, 0xaf, 0x01, 0x0a, 0x03, 0x4d, 0x66, 0x61, 0x12, 0x26, 0x0a,
|
||||
0x0e, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18,
|
||||
0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x53, 0x65,
|
||||
0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x50, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x4f,
|
||||
0x6e, 0x57, 0x61, 0x6b, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x50, 0x72, 0x6f,
|
||||
0x6d, 0x70, 0x74, 0x4f, 0x6e, 0x57, 0x61, 0x6b, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x50, 0x72, 0x6f,
|
||||
0x6d, 0x70, 0x74, 0x4f, 0x6e, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28,
|
||||
0x08, 0x52, 0x0e, 0x50, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x4f, 0x6e, 0x55, 0x6e, 0x6c, 0x6f, 0x63,
|
||||
0x6b, 0x12, 0x34, 0x0a, 0x15, 0x49, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x65, 0x67, 0x61, 0x63,
|
||||
0x79, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08,
|
||||
0x52, 0x15, 0x49, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x45, 0x6e,
|
||||
0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x1a, 0x3c, 0x0a, 0x02, 0x4f, 0x73, 0x12, 0x16, 0x0a,
|
||||
0x06, 0x4f, 0x73, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x4f,
|
||||
0x73, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x4f, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69,
|
||||
0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x4f, 0x73, 0x56, 0x65, 0x72,
|
||||
0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x43, 0x0a, 0x06, 0x4f, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12,
|
||||
0x39, 0x0a, 0x06, 0x6f, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32,
|
||||
0x21, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x6d, 0x64, 0x2e,
|
||||
0x70, 0x62, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x75, 0x72, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x2e,
|
||||
0x4f, 0x73, 0x52, 0x06, 0x6f, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x1a, 0x71, 0x0a, 0x07, 0x50, 0x72,
|
||||
0x6f, 0x63, 0x65, 0x73, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x73, 0x54, 0x79, 0x70, 0x65, 0x18,
|
||||
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x4f, 0x73, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a,
|
||||
0x04, 0x50, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x50, 0x61, 0x74,
|
||||
0x68, 0x12, 0x16, 0x0a, 0x06, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28,
|
||||
0x09, 0x52, 0x06, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x46, 0x69, 0x6e,
|
||||
0x67, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52,
|
||||
0x0c, 0x46, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x73, 0x1a, 0x70, 0x0a,
|
||||
0x0c, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x12, 0x1a, 0x0a,
|
||||
0x08, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
|
||||
0x08, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x12, 0x44, 0x0a, 0x09, 0x70, 0x72, 0x6f,
|
||||
0x63, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x7a,
|
||||
0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e,
|
||||
0x50, 0x6f, 0x73, 0x74, 0x75, 0x72, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x2e, 0x50, 0x72, 0x6f,
|
||||
0x63, 0x65, 0x73, 0x73, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x73, 0x1a,
|
||||
0x23, 0x0a, 0x07, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x6f,
|
||||
0x6d, 0x61, 0x69, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x64, 0x6f, 0x6d,
|
||||
0x61, 0x69, 0x6e, 0x73, 0x1a, 0x53, 0x0a, 0x09, 0x54, 0x61, 0x67, 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, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01,
|
||||
0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63,
|
||||
0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x61, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05,
|
||||
0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x73, 0x75, 0x62,
|
||||
0x74, 0x79, 0x70, 0x65, 0x22, 0xe7, 0x01, 0x0a, 0x0a, 0x52, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74,
|
||||
0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
|
||||
0x02, 0x69, 0x64, 0x12, 0x38, 0x0a, 0x09, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x41, 0x74,
|
||||
0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
|
||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61,
|
||||
0x6d, 0x70, 0x52, 0x09, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x41, 0x74, 0x12, 0x3a, 0x0a,
|
||||
0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x7a, 0x69,
|
||||
0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x52,
|
||||
0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e,
|
||||
0x74, 0x72, 0x79, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x1a, 0x53, 0x0a, 0x09, 0x54, 0x61, 0x67,
|
||||
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, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75,
|
||||
0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65,
|
||||
0x64, 0x67, 0x65, 0x5f, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x61, 0x67, 0x56, 0x61,
|
||||
0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xff,
|
||||
0x02, 0x0a, 0x07, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64,
|
||||
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61,
|
||||
0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x37,
|
||||
0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x7a,
|
||||
0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e,
|
||||
0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72,
|
||||
0x79, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x2e, 0x0a, 0x12, 0x74, 0x65, 0x72, 0x6d, 0x69,
|
||||
0x6e, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x18, 0x04, 0x20,
|
||||
0x01, 0x28, 0x09, 0x52, 0x12, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x53,
|
||||
0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x26, 0x0a, 0x0e, 0x72, 0x6f, 0x6c, 0x65, 0x41,
|
||||
0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52,
|
||||
0x0e, 0x72, 0x6f, 0x6c, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12,
|
||||
0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09,
|
||||
0x52, 0x07, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x2e, 0x0a, 0x12, 0x65, 0x6e, 0x63,
|
||||
0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x18,
|
||||
0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f,
|
||||
0x6e, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x61, 0x78,
|
||||
0x49, 0x64, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b,
|
||||
0x6d, 0x61, 0x78, 0x49, 0x64, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x1a, 0x53, 0x0a, 0x09, 0x54,
|
||||
0x61, 0x67, 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, 0x30, 0x0a, 0x05, 0x76, 0x61,
|
||||
0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x7a, 0x69, 0x74, 0x69,
|
||||
0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x61, 0x67,
|
||||
0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01,
|
||||
0x22, 0xc5, 0x02, 0x0a, 0x17, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x64, 0x67, 0x65,
|
||||
0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x0e, 0x0a, 0x02,
|
||||
0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04,
|
||||
0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65,
|
||||
0x12, 0x47, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33,
|
||||
0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x6d, 0x64, 0x2e, 0x70,
|
||||
0x62, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x64, 0x67, 0x65, 0x52, 0x6f, 0x75,
|
||||
0x74, 0x65, 0x72, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e,
|
||||
0x74, 0x72, 0x79, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x6d,
|
||||
0x61, 0x6e, 0x74, 0x69, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x6d,
|
||||
0x61, 0x6e, 0x74, 0x69, 0x63, 0x12, 0x28, 0x0a, 0x0f, 0x65, 0x64, 0x67, 0x65, 0x52, 0x6f, 0x75,
|
||||
0x74, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f,
|
||||
0x65, 0x64, 0x67, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x12,
|
||||
0x22, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x18,
|
||||
0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x6f,
|
||||
0x6c, 0x65, 0x73, 0x1a, 0x53, 0x0a, 0x09, 0x54, 0x61, 0x67, 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, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
|
||||
0x0b, 0x32, 0x1a, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x6d,
|
||||
0x64, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x61, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76,
|
||||
0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xfb, 0x02, 0x0a, 0x0d, 0x53, 0x65, 0x72,
|
||||
0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64,
|
||||
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61,
|
||||
0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3d,
|
||||
0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x7a,
|
||||
0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e,
|
||||
0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x54, 0x61,
|
||||
0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x1a, 0x0a,
|
||||
0x08, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52,
|
||||
0x08, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x12, 0x24, 0x0a, 0x0d, 0x69, 0x64, 0x65,
|
||||
0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09,
|
||||
0x52, 0x0d, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x12,
|
||||
0x22, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x18,
|
||||
0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x6f,
|
||||
0x6c, 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x11, 0x70, 0x6f, 0x73, 0x74, 0x75, 0x72, 0x65, 0x43, 0x68,
|
||||
0x65, 0x63, 0x6b, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11,
|
||||
0x70, 0x6f, 0x73, 0x74, 0x75, 0x72, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x6f, 0x6c, 0x65,
|
||||
0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x54, 0x79, 0x70, 0x65, 0x18,
|
||||
0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x54, 0x79, 0x70,
|
||||
0x65, 0x1a, 0x53, 0x0a, 0x09, 0x54, 0x61, 0x67, 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, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
|
||||
0x1a, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x6d, 0x64, 0x2e,
|
||||
0x70, 0x62, 0x2e, 0x54, 0x61, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c,
|
||||
0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x8e, 0x04, 0x0a, 0x0d, 0x54, 0x72, 0x61, 0x6e, 0x73,
|
||||
0x69, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01,
|
||||
0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65,
|
||||
0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3d, 0x0a, 0x04,
|
||||
0x74, 0x61, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x7a, 0x69, 0x74,
|
||||
0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x72,
|
||||
0x61, 0x6e, 0x73, 0x69, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x54, 0x61, 0x67, 0x73,
|
||||
0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x69,
|
||||
0x73, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52,
|
||||
0x0a, 0x69, 0x73, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x12, 0x25, 0x0a, 0x0b, 0x66,
|
||||
0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09,
|
||||
0x48, 0x00, 0x52, 0x0b, 0x66, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x88,
|
||||
0x01, 0x01, 0x12, 0x39, 0x0a, 0x15, 0x75, 0x6e, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64,
|
||||
0x46, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28,
|
||||
0x09, 0x48, 0x01, 0x52, 0x15, 0x75, 0x6e, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x46,
|
||||
0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x12, 0x31, 0x0a,
|
||||
0x11, 0x75, 0x6e, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x43, 0x65, 0x72, 0x74, 0x50,
|
||||
0x65, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x11, 0x75, 0x6e, 0x76, 0x65,
|
||||
0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x43, 0x65, 0x72, 0x74, 0x50, 0x65, 0x6d, 0x88, 0x01, 0x01,
|
||||
0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x73, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04,
|
||||
0x63, 0x6f, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x6e, 0x6f, 0x54, 0x72, 0x61, 0x76, 0x65, 0x72,
|
||||
0x73, 0x61, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x6e, 0x6f, 0x54, 0x72, 0x61,
|
||||
0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c,
|
||||
0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c,
|
||||
0x65, 0x64, 0x1a, 0x53, 0x0a, 0x09, 0x54, 0x61, 0x67, 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, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
|
||||
0x32, 0x1a, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x6d, 0x64,
|
||||
0x2e, 0x70, 0x62, 0x2e, 0x54, 0x61, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61,
|
||||
0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x66, 0x69, 0x6e, 0x67,
|
||||
0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x42, 0x18, 0x0a, 0x16, 0x5f, 0x75, 0x6e, 0x76, 0x65,
|
||||
0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x46, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e,
|
||||
0x74, 0x42, 0x14, 0x0a, 0x12, 0x5f, 0x75, 0x6e, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64,
|
||||
0x43, 0x65, 0x72, 0x74, 0x50, 0x65, 0x6d, 0x22, 0xc2, 0x01, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61,
|
||||
0x74, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x43,
|
||||
0x6d, 0x64, 0x12, 0x37, 0x0a, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01,
|
||||
0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63,
|
||||
0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x52, 0x6f, 0x75,
|
||||
0x74, 0x65, 0x72, 0x52, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x12, 0x3c, 0x0a, 0x0a, 0x65,
|
||||
0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
|
||||
0x1c, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x6d, 0x64, 0x2e,
|
||||
0x70, 0x62, 0x2e, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x65,
|
||||
0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x31, 0x0a, 0x03, 0x63, 0x74, 0x78,
|
||||
0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64,
|
||||
0x67, 0x65, 0x5f, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65,
|
||||
0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x03, 0x63, 0x74, 0x78, 0x22, 0xaa, 0x02, 0x0a,
|
||||
0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f,
|
||||
0x6e, 0x66, 0x69, 0x67, 0x73, 0x43, 0x6d, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x64, 0x65, 0x6e,
|
||||
0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x64,
|
||||
0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x64, 0x64, 0x18,
|
||||
0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x64, 0x64, 0x12, 0x5f, 0x0a, 0x0e, 0x73, 0x65,
|
||||
0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03,
|
||||
0x28, 0x0b, 0x32, 0x37, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63,
|
||||
0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x72, 0x76,
|
||||
0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x43, 0x6d, 0x64, 0x2e, 0x53, 0x65,
|
||||
0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0e, 0x73, 0x65, 0x72,
|
||||
0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x31, 0x0a, 0x03, 0x63,
|
||||
0x74, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e,
|
||||
0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x6d, 0x64, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x61, 0x6e,
|
||||
0x67, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x03, 0x63, 0x74, 0x78, 0x1a, 0x49,
|
||||
0x0a, 0x0d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12,
|
||||
0x1c, 0x0a, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01,
|
||||
0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a,
|
||||
0x08, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
|
||||
0x08, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x2a, 0x80, 0x02, 0x0a, 0x0b, 0x43, 0x6f,
|
||||
0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x65, 0x72,
|
||||
0x6f, 0x10, 0x00, 0x12, 0x1d, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x64, 0x67,
|
||||
0x65, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, 0x10,
|
||||
0xe8, 0x07, 0x12, 0x2b, 0x0a, 0x26, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x45, 0x6e, 0x72,
|
||||
0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x57, 0x69, 0x74, 0x68, 0x41, 0x75, 0x74, 0x68, 0x65,
|
||||
0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, 0x10, 0xe9, 0x07, 0x12,
|
||||
0x19, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x64, 0x67, 0x65, 0x52, 0x6f, 0x75,
|
||||
0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x10, 0xea, 0x07, 0x12, 0x1c, 0x0a, 0x17, 0x43, 0x72,
|
||||
0x65, 0x61, 0x74, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65,
|
||||
0x72, 0x54, 0x79, 0x70, 0x65, 0x10, 0xeb, 0x07, 0x12, 0x26, 0x0a, 0x21, 0x43, 0x72, 0x65, 0x61,
|
||||
0x74, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x57, 0x69, 0x74, 0x68, 0x45, 0x6e,
|
||||
0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x54, 0x79, 0x70, 0x65, 0x10, 0xec, 0x07,
|
||||
0x12, 0x1d, 0x0a, 0x18, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
|
||||
0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x54, 0x79, 0x70, 0x65, 0x10, 0xed, 0x07, 0x12,
|
||||
0x1b, 0x0a, 0x16, 0x52, 0x65, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x45, 0x64, 0x67, 0x65, 0x52,
|
||||
0x6f, 0x75, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x10, 0xee, 0x07, 0x42, 0x29, 0x5a, 0x27,
|
||||
0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x7a,
|
||||
0x69, 0x74, 0x69, 0x2f, 0x65, 0x64, 0x67, 0x65, 0x2f, 0x70, 0x62, 0x2f, 0x65, 0x64, 0x67, 0x65,
|
||||
0x5f, 0x63, 0x6d, 0x64, 0x5f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
}
|
||||
|
||||
var (
|
||||
|
||||
@@ -256,6 +256,8 @@ message Identity {
|
||||
string Os = 2;
|
||||
string OsRelease = 3;
|
||||
string OsVersion = 4;
|
||||
string Domain = 5;
|
||||
string Hostname = 6;
|
||||
}
|
||||
|
||||
message SdkInfo {
|
||||
|
||||
@@ -384,10 +384,11 @@ func (TerminatorPrecedence) EnumDescriptor() ([]byte, []int) {
|
||||
type CreateTerminatorResult int32
|
||||
|
||||
const (
|
||||
CreateTerminatorResult_Success CreateTerminatorResult = 0
|
||||
CreateTerminatorResult_FailedIdConflict CreateTerminatorResult = 1
|
||||
CreateTerminatorResult_FailedOther CreateTerminatorResult = 2
|
||||
CreateTerminatorResult_FailedBusy CreateTerminatorResult = 3
|
||||
CreateTerminatorResult_Success CreateTerminatorResult = 0
|
||||
CreateTerminatorResult_FailedIdConflict CreateTerminatorResult = 1
|
||||
CreateTerminatorResult_FailedOther CreateTerminatorResult = 2
|
||||
CreateTerminatorResult_FailedBusy CreateTerminatorResult = 3
|
||||
CreateTerminatorResult_FailedInvalidSession CreateTerminatorResult = 4
|
||||
)
|
||||
|
||||
// Enum value maps for CreateTerminatorResult.
|
||||
@@ -397,12 +398,14 @@ var (
|
||||
1: "FailedIdConflict",
|
||||
2: "FailedOther",
|
||||
3: "FailedBusy",
|
||||
4: "FailedInvalidSession",
|
||||
}
|
||||
CreateTerminatorResult_value = map[string]int32{
|
||||
"Success": 0,
|
||||
"FailedIdConflict": 1,
|
||||
"FailedOther": 2,
|
||||
"FailedBusy": 3,
|
||||
"Success": 0,
|
||||
"FailedIdConflict": 1,
|
||||
"FailedOther": 2,
|
||||
"FailedBusy": 3,
|
||||
"FailedInvalidSession": 4,
|
||||
}
|
||||
)
|
||||
|
||||
@@ -2330,6 +2333,8 @@ type EnvInfo struct {
|
||||
Os string `protobuf:"bytes,2,opt,name=Os,proto3" json:"Os,omitempty"`
|
||||
OsRelease string `protobuf:"bytes,3,opt,name=OsRelease,proto3" json:"OsRelease,omitempty"`
|
||||
OsVersion string `protobuf:"bytes,4,opt,name=OsVersion,proto3" json:"OsVersion,omitempty"`
|
||||
Hostname string `protobuf:"bytes,5,opt,name=Hostname,proto3" json:"Hostname,omitempty"`
|
||||
Domain string `protobuf:"bytes,6,opt,name=Domain,proto3" json:"Domain,omitempty"`
|
||||
}
|
||||
|
||||
func (x *EnvInfo) Reset() {
|
||||
@@ -2392,6 +2397,20 @@ func (x *EnvInfo) GetOsVersion() string {
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *EnvInfo) GetHostname() string {
|
||||
if x != nil {
|
||||
return x.Hostname
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *EnvInfo) GetDomain() string {
|
||||
if x != nil {
|
||||
return x.Domain
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
type SdkInfo struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
@@ -3760,350 +3779,355 @@ var file_edge_ctrl_proto_rawDesc = []byte{
|
||||
0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
|
||||
0x24, 0x0a, 0x0d, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73,
|
||||
0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54,
|
||||
0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x22, 0x69, 0x0a, 0x07, 0x45, 0x6e, 0x76, 0x49, 0x6e, 0x66, 0x6f,
|
||||
0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
|
||||
0x61, 0x72, 0x63, 0x68, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
|
||||
0x52, 0x02, 0x4f, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x4f, 0x73, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73,
|
||||
0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x4f, 0x73, 0x52, 0x65, 0x6c, 0x65, 0x61,
|
||||
0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x4f, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18,
|
||||
0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x4f, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
|
||||
0x22, 0xa1, 0x01, 0x0a, 0x07, 0x53, 0x64, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x14, 0x0a, 0x05,
|
||||
0x41, 0x70, 0x70, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x41, 0x70, 0x70,
|
||||
0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
|
||||
0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69,
|
||||
0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01,
|
||||
0x28, 0x09, 0x52, 0x06, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x65,
|
||||
0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x52, 0x65,
|
||||
0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x05,
|
||||
0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x56, 0x65,
|
||||
0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x56, 0x65, 0x72,
|
||||
0x73, 0x69, 0x6f, 0x6e, 0x22, 0xa7, 0x01, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41,
|
||||
0x70, 0x69, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
|
||||
0x12, 0x34, 0x0a, 0x07, 0x65, 0x6e, 0x76, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28,
|
||||
0x0b, 0x32, 0x1a, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x74,
|
||||
0x72, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6e, 0x76, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x65,
|
||||
0x6e, 0x76, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x34, 0x0a, 0x07, 0x73, 0x64, 0x6b, 0x49, 0x6e, 0x66,
|
||||
0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65,
|
||||
0x64, 0x67, 0x65, 0x5f, 0x63, 0x74, 0x72, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x64, 0x6b, 0x49,
|
||||
0x6e, 0x66, 0x6f, 0x52, 0x07, 0x73, 0x64, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x20, 0x0a, 0x0b,
|
||||
0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x54, 0x79, 0x70, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28,
|
||||
0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x54, 0x79, 0x70, 0x65, 0x73, 0x22, 0x8a,
|
||||
0x06, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x69, 0x53, 0x65, 0x73, 0x73,
|
||||
0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73,
|
||||
0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
|
||||
0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b,
|
||||
0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12,
|
||||
0x36, 0x0a, 0x16, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76,
|
||||
0x61, 0x6c, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52,
|
||||
0x16, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c,
|
||||
0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74,
|
||||
0x69, 0x74, 0x79, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x64, 0x65,
|
||||
0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x64, 0x65, 0x6e, 0x74,
|
||||
0x69, 0x74, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69,
|
||||
0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x63, 0x0a, 0x18, 0x64,
|
||||
0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x48, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x65,
|
||||
0x63, 0x65, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e,
|
||||
0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x74, 0x72, 0x6c, 0x2e, 0x70,
|
||||
0x62, 0x2e, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x65, 0x63,
|
||||
0x65, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x18, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x48,
|
||||
0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x65, 0x63, 0x65, 0x64, 0x65, 0x6e, 0x63, 0x65,
|
||||
0x12, 0x2e, 0x0a, 0x12, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x48, 0x6f, 0x73, 0x74, 0x69,
|
||||
0x6e, 0x67, 0x43, 0x6f, 0x73, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x64, 0x65,
|
||||
0x66, 0x61, 0x75, 0x6c, 0x74, 0x48, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x73, 0x74,
|
||||
0x12, 0x20, 0x0a, 0x0b, 0x61, 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, 0x4a, 0x73, 0x6f, 0x6e, 0x18,
|
||||
0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x70, 0x70, 0x44, 0x61, 0x74, 0x61, 0x4a, 0x73,
|
||||
0x6f, 0x6e, 0x12, 0x73, 0x0a, 0x12, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x65,
|
||||
0x63, 0x65, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43,
|
||||
0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x74, 0x72, 0x6c, 0x2e,
|
||||
0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x69, 0x53, 0x65, 0x73, 0x73,
|
||||
0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76,
|
||||
0x69, 0x63, 0x65, 0x50, 0x72, 0x65, 0x63, 0x65, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x45, 0x6e,
|
||||
0x74, 0x72, 0x79, 0x52, 0x12, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x65, 0x63,
|
||||
0x65, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x61, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x69,
|
||||
0x63, 0x65, 0x43, 0x6f, 0x73, 0x74, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e,
|
||||
0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x74, 0x72, 0x6c, 0x2e, 0x70,
|
||||
0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x69, 0x53, 0x65, 0x73, 0x73, 0x69,
|
||||
0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69,
|
||||
0x63, 0x65, 0x43, 0x6f, 0x73, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x73, 0x65,
|
||||
0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x73, 0x74, 0x73, 0x1a, 0x6e, 0x0a, 0x17, 0x53, 0x65,
|
||||
0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x65, 0x63, 0x65, 0x64, 0x65, 0x6e, 0x63, 0x65, 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, 0x3d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
|
||||
0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64,
|
||||
0x67, 0x65, 0x5f, 0x63, 0x74, 0x72, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x65, 0x72, 0x6d, 0x69,
|
||||
0x6e, 0x61, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x65, 0x63, 0x65, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x52,
|
||||
0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3f, 0x0a, 0x11, 0x53, 0x65,
|
||||
0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x73, 0x74, 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, 0x0d,
|
||||
0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xae, 0x02, 0x0a, 0x1e,
|
||||
0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x46, 0x6f, 0x72,
|
||||
0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c,
|
||||
0x0a, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
|
||||
0x09, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b,
|
||||
0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
|
||||
0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x32,
|
||||
0x0a, 0x14, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x73, 0x74,
|
||||
0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x74, 0x65,
|
||||
0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65,
|
||||
0x49, 0x64, 0x12, 0x5b, 0x0a, 0x08, 0x70, 0x65, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x04,
|
||||
0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65,
|
||||
0x5f, 0x63, 0x74, 0x72, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43,
|
||||
0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
|
||||
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61,
|
||||
0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x70, 0x65, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x1a,
|
||||
0x3b, 0x0a, 0x0d, 0x50, 0x65, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79,
|
||||
0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 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, 0x4b, 0x0a, 0x15,
|
||||
0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73,
|
||||
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e,
|
||||
0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f,
|
||||
0x6e, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01,
|
||||
0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x90, 0x04, 0x0a, 0x1f, 0x43, 0x72,
|
||||
0x65, 0x61, 0x74, 0x65, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x53, 0x65,
|
||||
0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4b, 0x0a,
|
||||
0x0a, 0x61, 0x70, 0x69, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28,
|
||||
0x0b, 0x32, 0x2b, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x74,
|
||||
0x72, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x69, 0x53,
|
||||
0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a,
|
||||
0x61, 0x70, 0x69, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x42, 0x0a, 0x07, 0x73, 0x65,
|
||||
0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x7a, 0x69,
|
||||
0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x74, 0x72, 0x6c, 0x2e, 0x70, 0x62, 0x2e,
|
||||
0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73,
|
||||
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c,
|
||||
0x0a, 0x09, 0x63, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28,
|
||||
0x09, 0x52, 0x09, 0x63, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07,
|
||||
0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61,
|
||||
0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x5c, 0x0a, 0x08, 0x70, 0x65, 0x65, 0x72, 0x44, 0x61,
|
||||
0x74, 0x61, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e,
|
||||
0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x74, 0x72, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65,
|
||||
0x61, 0x74, 0x65, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x53, 0x65, 0x72,
|
||||
0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x50, 0x65, 0x65,
|
||||
0x72, 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x70, 0x65, 0x65, 0x72,
|
||||
0x44, 0x61, 0x74, 0x61, 0x12, 0x50, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x06, 0x20, 0x03,
|
||||
0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63,
|
||||
0x74, 0x72, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x69, 0x72,
|
||||
0x63, 0x75, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65,
|
||||
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79,
|
||||
0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x1a, 0x3b, 0x0a, 0x0d, 0x50, 0x65, 0x65, 0x72, 0x44, 0x61,
|
||||
0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01,
|
||||
0x20, 0x01, 0x28, 0x0d, 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, 0x1a, 0x37, 0x0a, 0x09, 0x54, 0x61, 0x67, 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,
|
||||
0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x6c, 0x0a, 0x0c,
|
||||
0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x0a,
|
||||
0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c,
|
||||
0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x3c, 0x0a, 0x08,
|
||||
0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20,
|
||||
0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x74, 0x72, 0x6c, 0x2e,
|
||||
0x70, 0x62, 0x2e, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
|
||||
0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x22, 0xa1, 0x01, 0x0a, 0x0d, 0x54,
|
||||
0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02,
|
||||
0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04,
|
||||
0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65,
|
||||
0x12, 0x20, 0x0a, 0x0b, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18,
|
||||
0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f,
|
||||
0x6e, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e,
|
||||
0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69,
|
||||
0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x05, 0x20, 0x01,
|
||||
0x28, 0x0c, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61,
|
||||
0x67, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x22, 0xd5,
|
||||
0x03, 0x0a, 0x1d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x54,
|
||||
0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
|
||||
0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18,
|
||||
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61,
|
||||
0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18,
|
||||
0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64,
|
||||
0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28,
|
||||
0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x5a, 0x0a, 0x08, 0x70, 0x65,
|
||||
0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x7a,
|
||||
0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x22, 0x9d, 0x01, 0x0a, 0x07, 0x45, 0x6e, 0x76, 0x49, 0x6e, 0x66,
|
||||
0x6f, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
|
||||
0x04, 0x61, 0x72, 0x63, 0x68, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28,
|
||||
0x09, 0x52, 0x02, 0x4f, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x4f, 0x73, 0x52, 0x65, 0x6c, 0x65, 0x61,
|
||||
0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x4f, 0x73, 0x52, 0x65, 0x6c, 0x65,
|
||||
0x61, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x4f, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
|
||||
0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x4f, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f,
|
||||
0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20,
|
||||
0x01, 0x28, 0x09, 0x52, 0x08, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a,
|
||||
0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x44,
|
||||
0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x22, 0xa1, 0x01, 0x0a, 0x07, 0x53, 0x64, 0x6b, 0x49, 0x6e, 0x66,
|
||||
0x6f, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x70, 0x70, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
|
||||
0x52, 0x05, 0x41, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x41, 0x70, 0x70, 0x56, 0x65,
|
||||
0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x41, 0x70, 0x70,
|
||||
0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x42, 0x72, 0x61, 0x6e, 0x63,
|
||||
0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x12,
|
||||
0x1a, 0x0a, 0x08, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28,
|
||||
0x09, 0x52, 0x08, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x54,
|
||||
0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12,
|
||||
0x18, 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09,
|
||||
0x52, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xa7, 0x01, 0x0a, 0x17, 0x43, 0x72,
|
||||
0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x69, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65,
|
||||
0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x07, 0x65, 0x6e, 0x76, 0x49, 0x6e, 0x66, 0x6f,
|
||||
0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64,
|
||||
0x67, 0x65, 0x5f, 0x63, 0x74, 0x72, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6e, 0x76, 0x49, 0x6e,
|
||||
0x66, 0x6f, 0x52, 0x07, 0x65, 0x6e, 0x76, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x34, 0x0a, 0x07, 0x73,
|
||||
0x64, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x7a,
|
||||
0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x74, 0x72, 0x6c, 0x2e, 0x70, 0x62,
|
||||
0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x54, 0x65, 0x72,
|
||||
0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50,
|
||||
0x65, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x70, 0x65,
|
||||
0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x73, 0x74, 0x18, 0x05,
|
||||
0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x63, 0x6f, 0x73, 0x74, 0x12, 0x47, 0x0a, 0x0a, 0x70, 0x72,
|
||||
0x65, 0x63, 0x65, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27,
|
||||
0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x74, 0x72, 0x6c, 0x2e,
|
||||
0x70, 0x62, 0x2e, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x65,
|
||||
0x63, 0x65, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x63, 0x65, 0x64, 0x65,
|
||||
0x6e, 0x63, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49,
|
||||
0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63,
|
||||
0x65, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53,
|
||||
0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x69, 0x6e, 0x73,
|
||||
0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x73,
|
||||
0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09,
|
||||
0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x1a, 0x3b, 0x0a, 0x0d, 0x50, 0x65, 0x65,
|
||||
0x72, 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65,
|
||||
0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 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, 0xf3, 0x01, 0x0a, 0x1e, 0x43, 0x72, 0x65, 0x61, 0x74,
|
||||
0x65, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f,
|
||||
0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4b, 0x0a, 0x0a, 0x61, 0x70, 0x69,
|
||||
0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e,
|
||||
0x2e, 0x53, 0x64, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x73, 0x64, 0x6b, 0x49, 0x6e, 0x66,
|
||||
0x6f, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x54, 0x79, 0x70, 0x65, 0x73,
|
||||
0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x54, 0x79,
|
||||
0x70, 0x65, 0x73, 0x22, 0x8a, 0x06, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70,
|
||||
0x69, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
|
||||
0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20,
|
||||
0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x14,
|
||||
0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74,
|
||||
0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x36, 0x0a, 0x16, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x49,
|
||||
0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x03,
|
||||
0x20, 0x01, 0x28, 0x0d, 0x52, 0x16, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x49, 0x6e, 0x74,
|
||||
0x65, 0x72, 0x76, 0x61, 0x6c, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x1e, 0x0a, 0x0a,
|
||||
0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
|
||||
0x52, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c,
|
||||
0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01,
|
||||
0x28, 0x09, 0x52, 0x0c, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4e, 0x61, 0x6d, 0x65,
|
||||
0x12, 0x63, 0x0a, 0x18, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x48, 0x6f, 0x73, 0x74, 0x69,
|
||||
0x6e, 0x67, 0x50, 0x72, 0x65, 0x63, 0x65, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01,
|
||||
0x28, 0x0e, 0x32, 0x27, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63,
|
||||
0x74, 0x72, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f,
|
||||
0x72, 0x50, 0x72, 0x65, 0x63, 0x65, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x18, 0x64, 0x65, 0x66,
|
||||
0x61, 0x75, 0x6c, 0x74, 0x48, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x65, 0x63, 0x65,
|
||||
0x64, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
|
||||
0x48, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x73, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28,
|
||||
0x0d, 0x52, 0x12, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x48, 0x6f, 0x73, 0x74, 0x69, 0x6e,
|
||||
0x67, 0x43, 0x6f, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x70, 0x70, 0x44, 0x61, 0x74, 0x61,
|
||||
0x4a, 0x73, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x70, 0x70, 0x44,
|
||||
0x61, 0x74, 0x61, 0x4a, 0x73, 0x6f, 0x6e, 0x12, 0x73, 0x0a, 0x12, 0x73, 0x65, 0x72, 0x76, 0x69,
|
||||
0x63, 0x65, 0x50, 0x72, 0x65, 0x63, 0x65, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x09, 0x20,
|
||||
0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f,
|
||||
0x63, 0x74, 0x72, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70,
|
||||
0x69, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
|
||||
0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x65, 0x63, 0x65, 0x64, 0x65, 0x6e,
|
||||
0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x12, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63,
|
||||
0x65, 0x50, 0x72, 0x65, 0x63, 0x65, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x61, 0x0a, 0x0c,
|
||||
0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x73, 0x74, 0x73, 0x18, 0x0a, 0x20, 0x03,
|
||||
0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63,
|
||||
0x74, 0x72, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x69,
|
||||
0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e,
|
||||
0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x73, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72,
|
||||
0x79, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x73, 0x74, 0x73, 0x1a,
|
||||
0x6e, 0x0a, 0x17, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x65, 0x63, 0x65, 0x64,
|
||||
0x65, 0x6e, 0x63, 0x65, 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, 0x3d, 0x0a, 0x05,
|
||||
0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x7a, 0x69,
|
||||
0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x74, 0x72, 0x6c, 0x2e, 0x70, 0x62, 0x2e,
|
||||
0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x65, 0x63, 0x65, 0x64,
|
||||
0x65, 0x6e, 0x63, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a,
|
||||
0x3f, 0x0a, 0x11, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x73, 0x74, 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, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01,
|
||||
0x22, 0xae, 0x02, 0x0a, 0x1e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x69, 0x72, 0x63, 0x75,
|
||||
0x69, 0x74, 0x46, 0x6f, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75,
|
||||
0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64,
|
||||
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49,
|
||||
0x64, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65,
|
||||
0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e,
|
||||
0x61, 0x6d, 0x65, 0x12, 0x32, 0x0a, 0x14, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f,
|
||||
0x72, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28,
|
||||
0x09, 0x52, 0x14, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x73,
|
||||
0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x5b, 0x0a, 0x08, 0x70, 0x65, 0x65, 0x72, 0x44,
|
||||
0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x7a, 0x69, 0x74, 0x69,
|
||||
0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x74, 0x72, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72,
|
||||
0x65, 0x61, 0x74, 0x65, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x53, 0x65,
|
||||
0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x65, 0x65,
|
||||
0x72, 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x70, 0x65, 0x65, 0x72,
|
||||
0x44, 0x61, 0x74, 0x61, 0x1a, 0x3b, 0x0a, 0x0d, 0x50, 0x65, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61,
|
||||
0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01,
|
||||
0x28, 0x0d, 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, 0x4b, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69,
|
||||
0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65,
|
||||
0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73,
|
||||
0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65,
|
||||
0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x90,
|
||||
0x04, 0x0a, 0x1f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74,
|
||||
0x46, 0x6f, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
|
||||
0x73, 0x65, 0x12, 0x4b, 0x0a, 0x0a, 0x61, 0x70, 0x69, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e,
|
||||
0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64,
|
||||
0x67, 0x65, 0x5f, 0x63, 0x74, 0x72, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74,
|
||||
0x65, 0x41, 0x70, 0x69, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f,
|
||||
0x6e, 0x73, 0x65, 0x52, 0x0a, 0x61, 0x70, 0x69, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12,
|
||||
0x42, 0x0a, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
|
||||
0x32, 0x28, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x74, 0x72,
|
||||
0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69,
|
||||
0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x07, 0x73, 0x65, 0x73, 0x73,
|
||||
0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x49, 0x64,
|
||||
0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x49,
|
||||
0x64, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x01,
|
||||
0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x5c, 0x0a, 0x08, 0x70,
|
||||
0x65, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e,
|
||||
0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x74, 0x72, 0x6c, 0x2e, 0x70,
|
||||
0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x69, 0x53, 0x65, 0x73, 0x73, 0x69,
|
||||
0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x61, 0x70, 0x69, 0x53,
|
||||
0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x42, 0x0a, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f,
|
||||
0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65,
|
||||
0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x46,
|
||||
0x6f, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
|
||||
0x65, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52,
|
||||
0x08, 0x70, 0x65, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x50, 0x0a, 0x04, 0x74, 0x61, 0x67,
|
||||
0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65,
|
||||
0x64, 0x67, 0x65, 0x5f, 0x63, 0x74, 0x72, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61,
|
||||
0x74, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
|
||||
0x65, 0x52, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x74, 0x65,
|
||||
0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
|
||||
0x52, 0x0c, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x64, 0x12, 0x1c,
|
||||
0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28,
|
||||
0x03, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x22, 0xec, 0x01, 0x0a,
|
||||
0x1d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x54, 0x65, 0x72,
|
||||
0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22,
|
||||
0x0a, 0x0c, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x64, 0x18, 0x01,
|
||||
0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72,
|
||||
0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d,
|
||||
0x52, 0x04, 0x63, 0x6f, 0x73, 0x74, 0x12, 0x47, 0x0a, 0x0a, 0x70, 0x72, 0x65, 0x63, 0x65, 0x64,
|
||||
0x65, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x7a, 0x69, 0x74,
|
||||
0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x74, 0x72, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x54,
|
||||
0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x65, 0x63, 0x65, 0x64, 0x65,
|
||||
0x6e, 0x63, 0x65, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x63, 0x65, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x12,
|
||||
0x2a, 0x0a, 0x10, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x65, 0x63, 0x65, 0x64, 0x65,
|
||||
0x6e, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x75, 0x70, 0x64, 0x61, 0x74,
|
||||
0x65, 0x50, 0x72, 0x65, 0x63, 0x65, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x75,
|
||||
0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52,
|
||||
0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x73, 0x74, 0x22, 0x9d, 0x01, 0x0a, 0x1d,
|
||||
0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64,
|
||||
0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x24, 0x0a,
|
||||
0x0d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x43, 0x73, 0x72, 0x18, 0x01,
|
||||
0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74,
|
||||
0x43, 0x73, 0x72, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x65, 0x72,
|
||||
0x74, 0x43, 0x73, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x65, 0x72, 0x76,
|
||||
0x65, 0x72, 0x43, 0x65, 0x72, 0x74, 0x43, 0x73, 0x72, 0x12, 0x30, 0x0a, 0x13, 0x72, 0x65, 0x71,
|
||||
0x75, 0x69, 0x72, 0x65, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
|
||||
0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x56,
|
||||
0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x85, 0x01, 0x0a, 0x17,
|
||||
0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x73, 0x52,
|
||||
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6c, 0x69, 0x65, 0x6e,
|
||||
0x74, 0x43, 0x65, 0x72, 0x74, 0x50, 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d,
|
||||
0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x50, 0x65, 0x6d, 0x12, 0x24, 0x0a,
|
||||
0x0d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x65, 0x72, 0x74, 0x50, 0x65, 0x6d, 0x18, 0x02,
|
||||
0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x65, 0x72, 0x74,
|
||||
0x50, 0x65, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x61, 0x43, 0x65, 0x72, 0x74, 0x73, 0x50, 0x65,
|
||||
0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x61, 0x43, 0x65, 0x72, 0x74, 0x73,
|
||||
0x50, 0x65, 0x6d, 0x22, 0x4b, 0x0a, 0x23, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e,
|
||||
0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x56, 0x65, 0x72,
|
||||
0x69, 0x66, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6c,
|
||||
0x69, 0x65, 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x50, 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28,
|
||||
0x09, 0x52, 0x0d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x50, 0x65, 0x6d,
|
||||
0x2a, 0xf4, 0x0a, 0x0a, 0x0b, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65,
|
||||
0x12, 0x08, 0x0a, 0x04, 0x5a, 0x65, 0x72, 0x6f, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x0f, 0x53, 0x65,
|
||||
0x72, 0x76, 0x65, 0x72, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x54, 0x79, 0x70, 0x65, 0x10, 0xa0, 0x9c,
|
||||
0x01, 0x12, 0x15, 0x0a, 0x0f, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x48, 0x65, 0x6c, 0x6c, 0x6f,
|
||||
0x54, 0x79, 0x70, 0x65, 0x10, 0xa1, 0x9c, 0x01, 0x12, 0x0f, 0x0a, 0x09, 0x45, 0x72, 0x72, 0x6f,
|
||||
0x72, 0x54, 0x79, 0x70, 0x65, 0x10, 0xa2, 0x9c, 0x01, 0x12, 0x18, 0x0a, 0x12, 0x53, 0x65, 0x73,
|
||||
0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x10,
|
||||
0x86, 0x9d, 0x01, 0x12, 0x19, 0x0a, 0x13, 0x41, 0x70, 0x69, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f,
|
||||
0x6e, 0x41, 0x64, 0x64, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x10, 0xe8, 0x9d, 0x01, 0x12, 0x1b,
|
||||
0x0a, 0x15, 0x41, 0x70, 0x69, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x55, 0x70, 0x64, 0x61,
|
||||
0x74, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x10, 0xe9, 0x9d, 0x01, 0x12, 0x1b, 0x0a, 0x15, 0x41,
|
||||
0x70, 0x69, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64,
|
||||
0x54, 0x79, 0x70, 0x65, 0x10, 0xea, 0x9d, 0x01, 0x12, 0x1d, 0x0a, 0x17, 0x41, 0x70, 0x69, 0x53,
|
||||
0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x54,
|
||||
0x79, 0x70, 0x65, 0x10, 0xeb, 0x9d, 0x01, 0x12, 0x1d, 0x0a, 0x17, 0x52, 0x65, 0x71, 0x75, 0x65,
|
||||
0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x53, 0x79, 0x6e, 0x63, 0x54, 0x79,
|
||||
0x70, 0x65, 0x10, 0xec, 0x9d, 0x01, 0x12, 0x1e, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
|
||||
0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79,
|
||||
0x70, 0x65, 0x10, 0xed, 0x9d, 0x01, 0x12, 0x1f, 0x0a, 0x19, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
|
||||
0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54,
|
||||
0x79, 0x70, 0x65, 0x10, 0xee, 0x9d, 0x01, 0x12, 0x21, 0x0a, 0x1b, 0x43, 0x72, 0x65, 0x61, 0x74,
|
||||
0x65, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65,
|
||||
0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xef, 0x9d, 0x01, 0x12, 0x22, 0x0a, 0x1c, 0x43, 0x72,
|
||||
0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65,
|
||||
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x10, 0xf0, 0x9d, 0x01, 0x12, 0x21,
|
||||
0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74,
|
||||
0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xf1, 0x9d,
|
||||
0x01, 0x12, 0x22, 0x0a, 0x1c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x72, 0x6d, 0x69,
|
||||
0x6e, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70,
|
||||
0x65, 0x10, 0xf2, 0x9d, 0x01, 0x12, 0x21, 0x0a, 0x1b, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x54,
|
||||
0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
|
||||
0x54, 0x79, 0x70, 0x65, 0x10, 0xf3, 0x9d, 0x01, 0x12, 0x22, 0x0a, 0x1c, 0x52, 0x65, 0x6d, 0x6f,
|
||||
0x76, 0x65, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70,
|
||||
0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x10, 0xf4, 0x9d, 0x01, 0x12, 0x21, 0x0a, 0x1b,
|
||||
0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73,
|
||||
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xf5, 0x9d, 0x01, 0x12,
|
||||
0x15, 0x0a, 0x0f, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79,
|
||||
0x70, 0x65, 0x10, 0xf6, 0x9d, 0x01, 0x12, 0x1a, 0x0a, 0x14, 0x53, 0x69, 0x67, 0x6e, 0x69, 0x6e,
|
||||
0x67, 0x43, 0x65, 0x72, 0x74, 0x41, 0x64, 0x64, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x10, 0xf7,
|
||||
0x9d, 0x01, 0x12, 0x23, 0x0a, 0x1d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x72, 0x6d,
|
||||
0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54,
|
||||
0x79, 0x70, 0x65, 0x10, 0xf8, 0x9d, 0x01, 0x12, 0x24, 0x0a, 0x1e, 0x43, 0x72, 0x65, 0x61, 0x74,
|
||||
0x65, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x32, 0x52, 0x65, 0x73,
|
||||
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x10, 0xf9, 0x9d, 0x01, 0x12, 0x20, 0x0a,
|
||||
0x1a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x56, 0x32,
|
||||
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xfa, 0x9d, 0x01, 0x12,
|
||||
0x21, 0x0a, 0x1b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74,
|
||||
0x56, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x10, 0xfb,
|
||||
0x9d, 0x01, 0x12, 0x10, 0x0a, 0x0a, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65,
|
||||
0x10, 0xcc, 0x9e, 0x01, 0x12, 0x21, 0x0a, 0x1b, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65,
|
||||
0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54,
|
||||
0x79, 0x70, 0x65, 0x10, 0xcd, 0x9e, 0x01, 0x12, 0x27, 0x0a, 0x21, 0x45, 0x6e, 0x72, 0x6f, 0x6c,
|
||||
0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x65,
|
||||
0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xce, 0x9e, 0x01,
|
||||
0x12, 0x2d, 0x0a, 0x27, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x78,
|
||||
0x74, 0x65, 0x6e, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79,
|
||||
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xcf, 0x9e, 0x01, 0x12,
|
||||
0x21, 0x0a, 0x1b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x69, 0x53, 0x65, 0x73, 0x73,
|
||||
0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xb0,
|
||||
0x9f, 0x01, 0x12, 0x22, 0x0a, 0x1c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x69, 0x53,
|
||||
0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79,
|
||||
0x70, 0x65, 0x10, 0xb1, 0x9f, 0x01, 0x12, 0x28, 0x0a, 0x22, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
|
||||
0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
|
||||
0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xb2, 0x9f, 0x01,
|
||||
0x12, 0x29, 0x0a, 0x23, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69,
|
||||
0x74, 0x46, 0x6f, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
|
||||
0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x10, 0xb3, 0x9f, 0x01, 0x12, 0x1d, 0x0a, 0x17, 0x4c,
|
||||
0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
|
||||
0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xb4, 0x9f, 0x01, 0x12, 0x15, 0x0a, 0x0f, 0x53, 0x65,
|
||||
0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xb5, 0x9f,
|
||||
0x01, 0x12, 0x27, 0x0a, 0x21, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x75, 0x6e, 0x6e, 0x65,
|
||||
0x6c, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65,
|
||||
0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xb6, 0x9f, 0x01, 0x12, 0x28, 0x0a, 0x22, 0x43, 0x72,
|
||||
0x65, 0x61, 0x74, 0x65, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e,
|
||||
0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65,
|
||||
0x10, 0xb7, 0x9f, 0x01, 0x12, 0x27, 0x0a, 0x21, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x75,
|
||||
0x74, 0x65, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x53, 0x65, 0x72, 0x76,
|
||||
0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x54, 0x61, 0x67, 0x73,
|
||||
0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x1a, 0x3b, 0x0a, 0x0d, 0x50,
|
||||
0x65, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03,
|
||||
0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 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, 0x1a, 0x37, 0x0a, 0x09, 0x54, 0x61, 0x67, 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, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,
|
||||
0x01, 0x22, 0x6c, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x4c, 0x69, 0x73,
|
||||
0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18,
|
||||
0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74,
|
||||
0x65, 0x12, 0x3c, 0x0a, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20,
|
||||
0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f,
|
||||
0x63, 0x74, 0x72, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x53, 0x65,
|
||||
0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x22,
|
||||
0xa1, 0x01, 0x0a, 0x0d, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
|
||||
0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69,
|
||||
0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
|
||||
0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73,
|
||||
0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x65, 0x72, 0x6d,
|
||||
0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x6e, 0x63, 0x72, 0x79,
|
||||
0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x65, 0x6e, 0x63,
|
||||
0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69,
|
||||
0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12,
|
||||
0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x74,
|
||||
0x61, 0x67, 0x73, 0x22, 0xd5, 0x03, 0x0a, 0x1d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x75,
|
||||
0x6e, 0x6e, 0x65, 0x6c, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65,
|
||||
0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xb8, 0x9f, 0x01, 0x12, 0x28, 0x0a,
|
||||
0x22, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x54, 0x65, 0x72,
|
||||
0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54,
|
||||
0x79, 0x70, 0x65, 0x10, 0xb9, 0x9f, 0x01, 0x12, 0x27, 0x0a, 0x21, 0x52, 0x65, 0x6d, 0x6f, 0x76,
|
||||
0x65, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f,
|
||||
0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xba, 0x9f, 0x01,
|
||||
0x12, 0x28, 0x0a, 0x22, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c,
|
||||
0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
|
||||
0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76,
|
||||
0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69,
|
||||
0x6f, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73,
|
||||
0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73,
|
||||
0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12,
|
||||
0x5a, 0x0a, 0x08, 0x70, 0x65, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x03, 0x28,
|
||||
0x0b, 0x32, 0x3e, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x74,
|
||||
0x72, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x75, 0x6e, 0x6e,
|
||||
0x65, 0x6c, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75,
|
||||
0x65, 0x73, 0x74, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72,
|
||||
0x79, 0x52, 0x08, 0x70, 0x65, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x63,
|
||||
0x6f, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x63, 0x6f, 0x73, 0x74, 0x12,
|
||||
0x47, 0x0a, 0x0a, 0x70, 0x72, 0x65, 0x63, 0x65, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x06, 0x20,
|
||||
0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f,
|
||||
0x63, 0x74, 0x72, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74,
|
||||
0x6f, 0x72, 0x50, 0x72, 0x65, 0x63, 0x65, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x0a, 0x70, 0x72,
|
||||
0x65, 0x63, 0x65, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x6e, 0x73, 0x74,
|
||||
0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e,
|
||||
0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x73, 0x74,
|
||||
0x61, 0x6e, 0x63, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c,
|
||||
0x52, 0x0e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74,
|
||||
0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20,
|
||||
0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x1a, 0x3b,
|
||||
0x0a, 0x0d, 0x50, 0x65, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12,
|
||||
0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 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, 0xf3, 0x01, 0x0a, 0x1e,
|
||||
0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x54, 0x65, 0x72, 0x6d,
|
||||
0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4b,
|
||||
0x0a, 0x0a, 0x61, 0x70, 0x69, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01,
|
||||
0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63,
|
||||
0x74, 0x72, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x69,
|
||||
0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52,
|
||||
0x0a, 0x61, 0x70, 0x69, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x42, 0x0a, 0x07, 0x73,
|
||||
0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x7a,
|
||||
0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x74, 0x72, 0x6c, 0x2e, 0x70, 0x62,
|
||||
0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65,
|
||||
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12,
|
||||
0x22, 0x0a, 0x0c, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x64, 0x18,
|
||||
0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f,
|
||||
0x72, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65,
|
||||
0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d,
|
||||
0x65, 0x22, 0xec, 0x01, 0x0a, 0x1d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x75, 0x6e, 0x6e,
|
||||
0x65, 0x6c, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75,
|
||||
0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f,
|
||||
0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x74, 0x65, 0x72, 0x6d, 0x69,
|
||||
0x6e, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x73, 0x74, 0x18,
|
||||
0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x63, 0x6f, 0x73, 0x74, 0x12, 0x47, 0x0a, 0x0a, 0x70,
|
||||
0x72, 0x65, 0x63, 0x65, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32,
|
||||
0x27, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x74, 0x72, 0x6c,
|
||||
0x2e, 0x70, 0x62, 0x2e, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x50, 0x72,
|
||||
0x65, 0x63, 0x65, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x63, 0x65, 0x64,
|
||||
0x65, 0x6e, 0x63, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72,
|
||||
0x65, 0x63, 0x65, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10,
|
||||
0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x65, 0x63, 0x65, 0x64, 0x65, 0x6e, 0x63, 0x65,
|
||||
0x12, 0x1e, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x73, 0x74, 0x18, 0x05,
|
||||
0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x73, 0x74,
|
||||
0x22, 0x9d, 0x01, 0x0a, 0x1d, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x45,
|
||||
0x78, 0x74, 0x65, 0x6e, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65,
|
||||
0x73, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74,
|
||||
0x43, 0x73, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6c, 0x69, 0x65, 0x6e,
|
||||
0x74, 0x43, 0x65, 0x72, 0x74, 0x43, 0x73, 0x72, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x65, 0x72, 0x76,
|
||||
0x65, 0x72, 0x43, 0x65, 0x72, 0x74, 0x43, 0x73, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
|
||||
0x0d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x65, 0x72, 0x74, 0x43, 0x73, 0x72, 0x12, 0x30,
|
||||
0x0a, 0x13, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63,
|
||||
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x72, 0x65, 0x71,
|
||||
0x75, 0x69, 0x72, 0x65, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
|
||||
0x22, 0x85, 0x01, 0x0a, 0x17, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x43,
|
||||
0x65, 0x72, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x24, 0x0a, 0x0d,
|
||||
0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x50, 0x65, 0x6d, 0x18, 0x01, 0x20,
|
||||
0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x50,
|
||||
0x65, 0x6d, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x65, 0x72, 0x74,
|
||||
0x50, 0x65, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x65,
|
||||
0x72, 0x43, 0x65, 0x72, 0x74, 0x50, 0x65, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x61, 0x43, 0x65,
|
||||
0x72, 0x74, 0x73, 0x50, 0x65, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x61,
|
||||
0x43, 0x65, 0x72, 0x74, 0x73, 0x50, 0x65, 0x6d, 0x22, 0x4b, 0x0a, 0x23, 0x45, 0x6e, 0x72, 0x6f,
|
||||
0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x52, 0x6f, 0x75, 0x74,
|
||||
0x65, 0x72, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
|
||||
0x24, 0x0a, 0x0d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x50, 0x65, 0x6d,
|
||||
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x65,
|
||||
0x72, 0x74, 0x50, 0x65, 0x6d, 0x2a, 0xf4, 0x0a, 0x0a, 0x0b, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
|
||||
0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x65, 0x72, 0x6f, 0x10, 0x00, 0x12,
|
||||
0x15, 0x0a, 0x0f, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x54, 0x79,
|
||||
0x70, 0x65, 0x10, 0xa0, 0x9c, 0x01, 0x12, 0x15, 0x0a, 0x0f, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74,
|
||||
0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x54, 0x79, 0x70, 0x65, 0x10, 0xa1, 0x9c, 0x01, 0x12, 0x0f, 0x0a,
|
||||
0x09, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, 0x10, 0xa2, 0x9c, 0x01, 0x12, 0x18,
|
||||
0x0a, 0x12, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64,
|
||||
0x54, 0x79, 0x70, 0x65, 0x10, 0x86, 0x9d, 0x01, 0x12, 0x19, 0x0a, 0x13, 0x41, 0x70, 0x69, 0x53,
|
||||
0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x41, 0x64, 0x64, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x10,
|
||||
0xe8, 0x9d, 0x01, 0x12, 0x1b, 0x0a, 0x15, 0x41, 0x70, 0x69, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f,
|
||||
0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x10, 0xe9, 0x9d, 0x01,
|
||||
0x12, 0x1b, 0x0a, 0x15, 0x41, 0x70, 0x69, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65,
|
||||
0x6d, 0x6f, 0x76, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x10, 0xea, 0x9d, 0x01, 0x12, 0x1d, 0x0a,
|
||||
0x17, 0x41, 0x70, 0x69, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x65, 0x61, 0x72, 0x74,
|
||||
0x62, 0x65, 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xeb, 0x9d, 0x01, 0x12, 0x1d, 0x0a, 0x17,
|
||||
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x53,
|
||||
0x79, 0x6e, 0x63, 0x54, 0x79, 0x70, 0x65, 0x10, 0xec, 0x9d, 0x01, 0x12, 0x1e, 0x0a, 0x18, 0x43,
|
||||
0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75,
|
||||
0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xed, 0x9d, 0x01, 0x12, 0x1f, 0x0a, 0x19, 0x43,
|
||||
0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70,
|
||||
0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x10, 0xee, 0x9d, 0x01, 0x12, 0x21, 0x0a, 0x1b,
|
||||
0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72,
|
||||
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xef, 0x9d, 0x01, 0x12,
|
||||
0x22, 0x0a, 0x1c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61,
|
||||
0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x10,
|
||||
0xf0, 0x9d, 0x01, 0x12, 0x21, 0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x72,
|
||||
0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79,
|
||||
0x70, 0x65, 0x10, 0xf1, 0x9d, 0x01, 0x12, 0x22, 0x0a, 0x1c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
|
||||
0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
|
||||
0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x10, 0xbb, 0x9f, 0x01, 0x12, 0x1b, 0x0a, 0x15, 0x54, 0x75,
|
||||
0x6e, 0x6e, 0x65, 0x6c, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54,
|
||||
0x79, 0x70, 0x65, 0x10, 0xbc, 0x9f, 0x01, 0x2a, 0x21, 0x0a, 0x0b, 0x53, 0x65, 0x73, 0x73, 0x69,
|
||||
0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x69, 0x61, 0x6c, 0x10, 0x00,
|
||||
0x12, 0x08, 0x0a, 0x04, 0x42, 0x69, 0x6e, 0x64, 0x10, 0x01, 0x2a, 0x3d, 0x0a, 0x06, 0x48, 0x65,
|
||||
0x61, 0x64, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x0a, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5a, 0x65,
|
||||
0x72, 0x6f, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0c, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74,
|
||||
0x6f, 0x72, 0x49, 0x64, 0x10, 0xfe, 0x07, 0x12, 0x10, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b,
|
||||
0x50, 0x61, 0x73, 0x73, 0x65, 0x64, 0x10, 0xff, 0x07, 0x2a, 0x2e, 0x0a, 0x0a, 0x43, 0x6f, 0x6e,
|
||||
0x66, 0x69, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x64, 0x64, 0x10, 0x00,
|
||||
0x12, 0x0a, 0x0a, 0x06, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07,
|
||||
0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x10, 0x02, 0x2a, 0x3d, 0x0a, 0x14, 0x54, 0x65, 0x72,
|
||||
0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x65, 0x63, 0x65, 0x64, 0x65, 0x6e, 0x63,
|
||||
0x65, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x10, 0x00, 0x12, 0x0c,
|
||||
0x0a, 0x08, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06,
|
||||
0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x10, 0x02, 0x2a, 0x5c, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61,
|
||||
0x74, 0x65, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x75,
|
||||
0x6c, 0x74, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x10, 0x00, 0x12,
|
||||
0x14, 0x0a, 0x10, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x49, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x6c,
|
||||
0x69, 0x63, 0x74, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x4f,
|
||||
0x74, 0x68, 0x65, 0x72, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64,
|
||||
0x42, 0x75, 0x73, 0x79, 0x10, 0x03, 0x42, 0x2a, 0x5a, 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62,
|
||||
0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x7a, 0x69, 0x74, 0x69, 0x2f, 0x65, 0x64,
|
||||
0x67, 0x65, 0x2f, 0x70, 0x62, 0x2f, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x74, 0x72, 0x6c, 0x5f,
|
||||
0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x10, 0xf2, 0x9d, 0x01, 0x12, 0x21, 0x0a, 0x1b, 0x52, 0x65,
|
||||
0x6d, 0x6f, 0x76, 0x65, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65,
|
||||
0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xf3, 0x9d, 0x01, 0x12, 0x22, 0x0a,
|
||||
0x1c, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f,
|
||||
0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x10, 0xf4, 0x9d,
|
||||
0x01, 0x12, 0x21, 0x0a, 0x1b, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x73,
|
||||
0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65,
|
||||
0x10, 0xf5, 0x9d, 0x01, 0x12, 0x15, 0x0a, 0x0f, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x45, 0x76,
|
||||
0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xf6, 0x9d, 0x01, 0x12, 0x1a, 0x0a, 0x14, 0x53,
|
||||
0x69, 0x67, 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x65, 0x72, 0x74, 0x41, 0x64, 0x64, 0x65, 0x64, 0x54,
|
||||
0x79, 0x70, 0x65, 0x10, 0xf7, 0x9d, 0x01, 0x12, 0x23, 0x0a, 0x1d, 0x43, 0x72, 0x65, 0x61, 0x74,
|
||||
0x65, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x32, 0x52, 0x65, 0x71,
|
||||
0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xf8, 0x9d, 0x01, 0x12, 0x24, 0x0a, 0x1e,
|
||||
0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72,
|
||||
0x56, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x10, 0xf9,
|
||||
0x9d, 0x01, 0x12, 0x20, 0x0a, 0x1a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x69, 0x72, 0x63,
|
||||
0x75, 0x69, 0x74, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65,
|
||||
0x10, 0xfa, 0x9d, 0x01, 0x12, 0x21, 0x0a, 0x1b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x69,
|
||||
0x72, 0x63, 0x75, 0x69, 0x74, 0x56, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54,
|
||||
0x79, 0x70, 0x65, 0x10, 0xfb, 0x9d, 0x01, 0x12, 0x10, 0x0a, 0x0a, 0x45, 0x6e, 0x72, 0x6f, 0x6c,
|
||||
0x6c, 0x54, 0x79, 0x70, 0x65, 0x10, 0xcc, 0x9e, 0x01, 0x12, 0x21, 0x0a, 0x1b, 0x45, 0x6e, 0x72,
|
||||
0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70,
|
||||
0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x10, 0xcd, 0x9e, 0x01, 0x12, 0x27, 0x0a, 0x21,
|
||||
0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64,
|
||||
0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70,
|
||||
0x65, 0x10, 0xce, 0x9e, 0x01, 0x12, 0x2d, 0x0a, 0x27, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d,
|
||||
0x65, 0x6e, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x56,
|
||||
0x65, 0x72, 0x69, 0x66, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65,
|
||||
0x10, 0xcf, 0x9e, 0x01, 0x12, 0x21, 0x0a, 0x1b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70,
|
||||
0x69, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54,
|
||||
0x79, 0x70, 0x65, 0x10, 0xb0, 0x9f, 0x01, 0x12, 0x22, 0x0a, 0x1c, 0x43, 0x72, 0x65, 0x61, 0x74,
|
||||
0x65, 0x41, 0x70, 0x69, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f,
|
||||
0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x10, 0xb1, 0x9f, 0x01, 0x12, 0x28, 0x0a, 0x22, 0x43,
|
||||
0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x53,
|
||||
0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70,
|
||||
0x65, 0x10, 0xb2, 0x9f, 0x01, 0x12, 0x29, 0x0a, 0x23, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43,
|
||||
0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
|
||||
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x10, 0xb3, 0x9f, 0x01,
|
||||
0x12, 0x1d, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73,
|
||||
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xb4, 0x9f, 0x01, 0x12,
|
||||
0x15, 0x0a, 0x0f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x79,
|
||||
0x70, 0x65, 0x10, 0xb5, 0x9f, 0x01, 0x12, 0x27, 0x0a, 0x21, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
|
||||
0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72,
|
||||
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xb6, 0x9f, 0x01, 0x12,
|
||||
0x28, 0x0a, 0x22, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x54,
|
||||
0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
|
||||
0x65, 0x54, 0x79, 0x70, 0x65, 0x10, 0xb7, 0x9f, 0x01, 0x12, 0x27, 0x0a, 0x21, 0x55, 0x70, 0x64,
|
||||
0x61, 0x74, 0x65, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61,
|
||||
0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xb8,
|
||||
0x9f, 0x01, 0x12, 0x28, 0x0a, 0x22, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x75, 0x6e, 0x6e,
|
||||
0x65, 0x6c, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70,
|
||||
0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x10, 0xb9, 0x9f, 0x01, 0x12, 0x27, 0x0a, 0x21,
|
||||
0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x54, 0x65, 0x72, 0x6d,
|
||||
0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70,
|
||||
0x65, 0x10, 0xba, 0x9f, 0x01, 0x12, 0x28, 0x0a, 0x22, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x54,
|
||||
0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x52,
|
||||
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x10, 0xbb, 0x9f, 0x01, 0x12,
|
||||
0x1b, 0x0a, 0x15, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x45,
|
||||
0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xbc, 0x9f, 0x01, 0x2a, 0x21, 0x0a, 0x0b,
|
||||
0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x44,
|
||||
0x69, 0x61, 0x6c, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x42, 0x69, 0x6e, 0x64, 0x10, 0x01, 0x2a,
|
||||
0x3d, 0x0a, 0x06, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x0a, 0x48, 0x65, 0x61,
|
||||
0x64, 0x65, 0x72, 0x5a, 0x65, 0x72, 0x6f, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0c, 0x54, 0x65, 0x72,
|
||||
0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x64, 0x10, 0xfe, 0x07, 0x12, 0x10, 0x0a, 0x0b,
|
||||
0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x61, 0x73, 0x73, 0x65, 0x64, 0x10, 0xff, 0x07, 0x2a, 0x2e,
|
||||
0x0a, 0x0a, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x07, 0x0a, 0x03,
|
||||
0x41, 0x64, 0x64, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x10,
|
||||
0x01, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x10, 0x02, 0x2a, 0x3d,
|
||||
0x0a, 0x14, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x65, 0x63,
|
||||
0x65, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c,
|
||||
0x74, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x10,
|
||||
0x01, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x10, 0x02, 0x2a, 0x76, 0x0a,
|
||||
0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f,
|
||||
0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x75, 0x63, 0x63, 0x65,
|
||||
0x73, 0x73, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x49, 0x64,
|
||||
0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x46, 0x61,
|
||||
0x69, 0x6c, 0x65, 0x64, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x46,
|
||||
0x61, 0x69, 0x6c, 0x65, 0x64, 0x42, 0x75, 0x73, 0x79, 0x10, 0x03, 0x12, 0x18, 0x0a, 0x14, 0x46,
|
||||
0x61, 0x69, 0x6c, 0x65, 0x64, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x53, 0x65, 0x73, 0x73,
|
||||
0x69, 0x6f, 0x6e, 0x10, 0x04, 0x42, 0x2a, 0x5a, 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e,
|
||||
0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x7a, 0x69, 0x74, 0x69, 0x2f, 0x65, 0x64, 0x67,
|
||||
0x65, 0x2f, 0x70, 0x62, 0x2f, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x74, 0x72, 0x6c, 0x5f, 0x70,
|
||||
0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
}
|
||||
|
||||
var (
|
||||
|
||||
@@ -244,6 +244,7 @@ enum CreateTerminatorResult {
|
||||
FailedIdConflict = 1;
|
||||
FailedOther = 2;
|
||||
FailedBusy = 3;
|
||||
FailedInvalidSession = 4;
|
||||
}
|
||||
|
||||
message CreateTerminatorV2Response {
|
||||
@@ -284,6 +285,8 @@ message EnvInfo {
|
||||
string Os = 2;
|
||||
string OsRelease = 3;
|
||||
string OsVersion = 4;
|
||||
string Hostname = 5;
|
||||
string Domain = 6;
|
||||
}
|
||||
|
||||
message SdkInfo {
|
||||
|
||||
@@ -35,3 +35,15 @@ func (request *ValidateRouterLinksResponse) GetContentType() int32 {
|
||||
func (request *RouterLinkDetails) GetContentType() int32 {
|
||||
return int32(ContentType_ValidateRouterLinksResultType)
|
||||
}
|
||||
|
||||
func (request *ValidateRouterSdkTerminatorsRequest) GetContentType() int32 {
|
||||
return int32(ContentType_ValidateRouterSdkTerminatorsRequestType)
|
||||
}
|
||||
|
||||
func (request *ValidateRouterSdkTerminatorsResponse) GetContentType() int32 {
|
||||
return int32(ContentType_ValidateRouterSdkTerminatorsResponseType)
|
||||
}
|
||||
|
||||
func (request *RouterSdkTerminatorsDetails) GetContentType() int32 {
|
||||
return int32(ContentType_ValidateRouterSdkTerminatorsResultType)
|
||||
}
|
||||
|
||||
+562
-162
@@ -56,12 +56,15 @@ const (
|
||||
ContentType_RaftTransferLeadershipRequestType ContentType = 10084
|
||||
ContentType_RaftInitFromDb ContentType = 10085
|
||||
// Validate
|
||||
ContentType_ValidateTerminatorsRequestType ContentType = 10100
|
||||
ContentType_ValidateTerminatorResponseType ContentType = 10101
|
||||
ContentType_ValidateTerminatorResultType ContentType = 10102
|
||||
ContentType_ValidateRouterLinksRequestType ContentType = 10103
|
||||
ContentType_ValidateRouterLinksResponseType ContentType = 10104
|
||||
ContentType_ValidateRouterLinksResultType ContentType = 10105
|
||||
ContentType_ValidateTerminatorsRequestType ContentType = 10100
|
||||
ContentType_ValidateTerminatorResponseType ContentType = 10101
|
||||
ContentType_ValidateTerminatorResultType ContentType = 10102
|
||||
ContentType_ValidateRouterLinksRequestType ContentType = 10103
|
||||
ContentType_ValidateRouterLinksResponseType ContentType = 10104
|
||||
ContentType_ValidateRouterLinksResultType ContentType = 10105
|
||||
ContentType_ValidateRouterSdkTerminatorsRequestType ContentType = 10106
|
||||
ContentType_ValidateRouterSdkTerminatorsResponseType ContentType = 10107
|
||||
ContentType_ValidateRouterSdkTerminatorsResultType ContentType = 10108
|
||||
)
|
||||
|
||||
// Enum value maps for ContentType.
|
||||
@@ -98,6 +101,9 @@ var (
|
||||
10103: "ValidateRouterLinksRequestType",
|
||||
10104: "ValidateRouterLinksResponseType",
|
||||
10105: "ValidateRouterLinksResultType",
|
||||
10106: "ValidateRouterSdkTerminatorsRequestType",
|
||||
10107: "ValidateRouterSdkTerminatorsResponseType",
|
||||
10108: "ValidateRouterSdkTerminatorsResultType",
|
||||
}
|
||||
ContentType_value = map[string]int32{
|
||||
"Zero": 0,
|
||||
@@ -131,6 +137,9 @@ var (
|
||||
"ValidateRouterLinksRequestType": 10103,
|
||||
"ValidateRouterLinksResponseType": 10104,
|
||||
"ValidateRouterLinksResultType": 10105,
|
||||
"ValidateRouterSdkTerminatorsRequestType": 10106,
|
||||
"ValidateRouterSdkTerminatorsResponseType": 10107,
|
||||
"ValidateRouterSdkTerminatorsResultType": 10108,
|
||||
}
|
||||
)
|
||||
|
||||
@@ -1637,6 +1646,290 @@ func (x *RouterLinkDetail) GetDialed() bool {
|
||||
return false
|
||||
}
|
||||
|
||||
type ValidateRouterSdkTerminatorsRequest struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
Filter string `protobuf:"bytes,1,opt,name=filter,proto3" json:"filter,omitempty"`
|
||||
}
|
||||
|
||||
func (x *ValidateRouterSdkTerminatorsRequest) Reset() {
|
||||
*x = ValidateRouterSdkTerminatorsRequest{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_mgmt_proto_msgTypes[17]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
}
|
||||
|
||||
func (x *ValidateRouterSdkTerminatorsRequest) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*ValidateRouterSdkTerminatorsRequest) ProtoMessage() {}
|
||||
|
||||
func (x *ValidateRouterSdkTerminatorsRequest) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_mgmt_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 ValidateRouterSdkTerminatorsRequest.ProtoReflect.Descriptor instead.
|
||||
func (*ValidateRouterSdkTerminatorsRequest) Descriptor() ([]byte, []int) {
|
||||
return file_mgmt_proto_rawDescGZIP(), []int{17}
|
||||
}
|
||||
|
||||
func (x *ValidateRouterSdkTerminatorsRequest) GetFilter() string {
|
||||
if x != nil {
|
||||
return x.Filter
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
type ValidateRouterSdkTerminatorsResponse struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"`
|
||||
Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"`
|
||||
RouterCount uint64 `protobuf:"varint,3,opt,name=routerCount,proto3" json:"routerCount,omitempty"`
|
||||
}
|
||||
|
||||
func (x *ValidateRouterSdkTerminatorsResponse) Reset() {
|
||||
*x = ValidateRouterSdkTerminatorsResponse{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_mgmt_proto_msgTypes[18]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
}
|
||||
|
||||
func (x *ValidateRouterSdkTerminatorsResponse) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*ValidateRouterSdkTerminatorsResponse) ProtoMessage() {}
|
||||
|
||||
func (x *ValidateRouterSdkTerminatorsResponse) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_mgmt_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 ValidateRouterSdkTerminatorsResponse.ProtoReflect.Descriptor instead.
|
||||
func (*ValidateRouterSdkTerminatorsResponse) Descriptor() ([]byte, []int) {
|
||||
return file_mgmt_proto_rawDescGZIP(), []int{18}
|
||||
}
|
||||
|
||||
func (x *ValidateRouterSdkTerminatorsResponse) GetSuccess() bool {
|
||||
if x != nil {
|
||||
return x.Success
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (x *ValidateRouterSdkTerminatorsResponse) GetMessage() string {
|
||||
if x != nil {
|
||||
return x.Message
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *ValidateRouterSdkTerminatorsResponse) GetRouterCount() uint64 {
|
||||
if x != nil {
|
||||
return x.RouterCount
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
type RouterSdkTerminatorsDetails struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
RouterId string `protobuf:"bytes,1,opt,name=routerId,proto3" json:"routerId,omitempty"`
|
||||
RouterName string `protobuf:"bytes,2,opt,name=routerName,proto3" json:"routerName,omitempty"`
|
||||
ValidateSuccess bool `protobuf:"varint,3,opt,name=validateSuccess,proto3" json:"validateSuccess,omitempty"`
|
||||
Message string `protobuf:"bytes,4,opt,name=message,proto3" json:"message,omitempty"`
|
||||
Details []*RouterSdkTerminatorDetail `protobuf:"bytes,5,rep,name=details,proto3" json:"details,omitempty"`
|
||||
}
|
||||
|
||||
func (x *RouterSdkTerminatorsDetails) Reset() {
|
||||
*x = RouterSdkTerminatorsDetails{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_mgmt_proto_msgTypes[19]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
}
|
||||
|
||||
func (x *RouterSdkTerminatorsDetails) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*RouterSdkTerminatorsDetails) ProtoMessage() {}
|
||||
|
||||
func (x *RouterSdkTerminatorsDetails) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_mgmt_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 RouterSdkTerminatorsDetails.ProtoReflect.Descriptor instead.
|
||||
func (*RouterSdkTerminatorsDetails) Descriptor() ([]byte, []int) {
|
||||
return file_mgmt_proto_rawDescGZIP(), []int{19}
|
||||
}
|
||||
|
||||
func (x *RouterSdkTerminatorsDetails) GetRouterId() string {
|
||||
if x != nil {
|
||||
return x.RouterId
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *RouterSdkTerminatorsDetails) GetRouterName() string {
|
||||
if x != nil {
|
||||
return x.RouterName
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *RouterSdkTerminatorsDetails) GetValidateSuccess() bool {
|
||||
if x != nil {
|
||||
return x.ValidateSuccess
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (x *RouterSdkTerminatorsDetails) GetMessage() string {
|
||||
if x != nil {
|
||||
return x.Message
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *RouterSdkTerminatorsDetails) GetDetails() []*RouterSdkTerminatorDetail {
|
||||
if x != nil {
|
||||
return x.Details
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
type RouterSdkTerminatorDetail struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
TerminatorId string `protobuf:"bytes,1,opt,name=terminatorId,proto3" json:"terminatorId,omitempty"`
|
||||
CtrlState TerminatorState `protobuf:"varint,2,opt,name=ctrlState,proto3,enum=ziti.mgmt_pb.TerminatorState" json:"ctrlState,omitempty"`
|
||||
RouterState string `protobuf:"bytes,3,opt,name=routerState,proto3" json:"routerState,omitempty"`
|
||||
IsValid bool `protobuf:"varint,4,opt,name=isValid,proto3" json:"isValid,omitempty"`
|
||||
OperaationActive bool `protobuf:"varint,5,opt,name=operaationActive,proto3" json:"operaationActive,omitempty"`
|
||||
CreateTime string `protobuf:"bytes,6,opt,name=createTime,proto3" json:"createTime,omitempty"`
|
||||
LastAttempt string `protobuf:"bytes,7,opt,name=lastAttempt,proto3" json:"lastAttempt,omitempty"`
|
||||
}
|
||||
|
||||
func (x *RouterSdkTerminatorDetail) Reset() {
|
||||
*x = RouterSdkTerminatorDetail{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_mgmt_proto_msgTypes[20]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
}
|
||||
|
||||
func (x *RouterSdkTerminatorDetail) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*RouterSdkTerminatorDetail) ProtoMessage() {}
|
||||
|
||||
func (x *RouterSdkTerminatorDetail) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_mgmt_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 RouterSdkTerminatorDetail.ProtoReflect.Descriptor instead.
|
||||
func (*RouterSdkTerminatorDetail) Descriptor() ([]byte, []int) {
|
||||
return file_mgmt_proto_rawDescGZIP(), []int{20}
|
||||
}
|
||||
|
||||
func (x *RouterSdkTerminatorDetail) GetTerminatorId() string {
|
||||
if x != nil {
|
||||
return x.TerminatorId
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *RouterSdkTerminatorDetail) GetCtrlState() TerminatorState {
|
||||
if x != nil {
|
||||
return x.CtrlState
|
||||
}
|
||||
return TerminatorState_Valid
|
||||
}
|
||||
|
||||
func (x *RouterSdkTerminatorDetail) GetRouterState() string {
|
||||
if x != nil {
|
||||
return x.RouterState
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *RouterSdkTerminatorDetail) GetIsValid() bool {
|
||||
if x != nil {
|
||||
return x.IsValid
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (x *RouterSdkTerminatorDetail) GetOperaationActive() bool {
|
||||
if x != nil {
|
||||
return x.OperaationActive
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (x *RouterSdkTerminatorDetail) GetCreateTime() string {
|
||||
if x != nil {
|
||||
return x.CreateTime
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *RouterSdkTerminatorDetail) GetLastAttempt() string {
|
||||
if x != nil {
|
||||
return x.LastAttempt
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
type StreamMetricsRequest_MetricMatcher struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
@@ -1649,7 +1942,7 @@ type StreamMetricsRequest_MetricMatcher struct {
|
||||
func (x *StreamMetricsRequest_MetricMatcher) Reset() {
|
||||
*x = StreamMetricsRequest_MetricMatcher{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_mgmt_proto_msgTypes[17]
|
||||
mi := &file_mgmt_proto_msgTypes[21]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
@@ -1662,7 +1955,7 @@ func (x *StreamMetricsRequest_MetricMatcher) String() string {
|
||||
func (*StreamMetricsRequest_MetricMatcher) ProtoMessage() {}
|
||||
|
||||
func (x *StreamMetricsRequest_MetricMatcher) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_mgmt_proto_msgTypes[17]
|
||||
mi := &file_mgmt_proto_msgTypes[21]
|
||||
if protoimpl.UnsafeEnabled && x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
@@ -1706,7 +1999,7 @@ type StreamMetricsEvent_IntervalMetric struct {
|
||||
func (x *StreamMetricsEvent_IntervalMetric) Reset() {
|
||||
*x = StreamMetricsEvent_IntervalMetric{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_mgmt_proto_msgTypes[21]
|
||||
mi := &file_mgmt_proto_msgTypes[25]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
@@ -1719,7 +2012,7 @@ func (x *StreamMetricsEvent_IntervalMetric) String() string {
|
||||
func (*StreamMetricsEvent_IntervalMetric) ProtoMessage() {}
|
||||
|
||||
func (x *StreamMetricsEvent_IntervalMetric) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_mgmt_proto_msgTypes[21]
|
||||
mi := &file_mgmt_proto_msgTypes[25]
|
||||
if protoimpl.UnsafeEnabled && x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
@@ -1776,7 +2069,7 @@ type InspectResponse_InspectValue struct {
|
||||
func (x *InspectResponse_InspectValue) Reset() {
|
||||
*x = InspectResponse_InspectValue{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_mgmt_proto_msgTypes[24]
|
||||
mi := &file_mgmt_proto_msgTypes[28]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
@@ -1789,7 +2082,7 @@ func (x *InspectResponse_InspectValue) String() string {
|
||||
func (*InspectResponse_InspectValue) ProtoMessage() {}
|
||||
|
||||
func (x *InspectResponse_InspectValue) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_mgmt_proto_msgTypes[24]
|
||||
mi := &file_mgmt_proto_msgTypes[28]
|
||||
if protoimpl.UnsafeEnabled && x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
@@ -2071,104 +2364,157 @@ var file_mgmt_proto_rawDesc = []byte{
|
||||
0x6f, 0x75, 0x74, 0x65, 0x72, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64,
|
||||
0x65, 0x73, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x64,
|
||||
0x69, 0x61, 0x6c, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x64, 0x69, 0x61,
|
||||
0x6c, 0x65, 0x64, 0x2a, 0x95, 0x08, 0x0a, 0x0b, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54,
|
||||
0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x65, 0x72, 0x6f, 0x10, 0x00, 0x12, 0x1c, 0x0a,
|
||||
0x17, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71,
|
||||
0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xb8, 0x4e, 0x12, 0x1a, 0x0a, 0x15, 0x53,
|
||||
0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74,
|
||||
0x54, 0x79, 0x70, 0x65, 0x10, 0xb9, 0x4e, 0x12, 0x20, 0x0a, 0x1b, 0x54, 0x6f, 0x67, 0x67, 0x6c,
|
||||
0x65, 0x50, 0x69, 0x70, 0x65, 0x54, 0x72, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
|
||||
0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xbc, 0x4e, 0x12, 0x23, 0x0a, 0x1e, 0x54, 0x6f, 0x67,
|
||||
0x67, 0x6c, 0x65, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x54, 0x72, 0x61, 0x63, 0x65, 0x73,
|
||||
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xbd, 0x4e, 0x12, 0x1c,
|
||||
0x0a, 0x17, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x54, 0x72, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65,
|
||||
0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xbe, 0x4e, 0x12, 0x1a, 0x0a, 0x15,
|
||||
0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x54, 0x72, 0x61, 0x63, 0x65, 0x73, 0x45, 0x76, 0x65, 0x6e,
|
||||
0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xbf, 0x4e, 0x12, 0x17, 0x0a, 0x12, 0x49, 0x6e, 0x73, 0x70,
|
||||
0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xc0,
|
||||
0x4e, 0x12, 0x18, 0x0a, 0x13, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70,
|
||||
0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x10, 0xc1, 0x4e, 0x12, 0x1a, 0x0a, 0x15, 0x53,
|
||||
0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x44, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
|
||||
0x54, 0x79, 0x70, 0x65, 0x10, 0xd6, 0x4e, 0x12, 0x25, 0x0a, 0x20, 0x52, 0x6f, 0x75, 0x74, 0x65,
|
||||
0x72, 0x44, 0x65, 0x62, 0x75, 0x67, 0x46, 0x6f, 0x72, 0x67, 0x65, 0x74, 0x4c, 0x69, 0x6e, 0x6b,
|
||||
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xd7, 0x4e, 0x12, 0x2c,
|
||||
0x0a, 0x27, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x44, 0x65, 0x62, 0x75, 0x67, 0x54, 0x6f, 0x67,
|
||||
0x67, 0x6c, 0x65, 0x43, 0x74, 0x72, 0x6c, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65,
|
||||
0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xd8, 0x4e, 0x12, 0x26, 0x0a, 0x21,
|
||||
0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x44, 0x65, 0x62, 0x75, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74,
|
||||
0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70,
|
||||
0x65, 0x10, 0xd9, 0x4e, 0x12, 0x2e, 0x0a, 0x29, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x44, 0x65,
|
||||
0x62, 0x75, 0x67, 0x44, 0x75, 0x6d, 0x70, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x65, 0x72,
|
||||
0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70,
|
||||
0x65, 0x10, 0xda, 0x4e, 0x12, 0x24, 0x0a, 0x1f, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x44, 0x65,
|
||||
0x62, 0x75, 0x67, 0x44, 0x75, 0x6d, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75,
|
||||
0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xdb, 0x4e, 0x12, 0x22, 0x0a, 0x1d, 0x52, 0x6f,
|
||||
0x75, 0x74, 0x65, 0x72, 0x44, 0x65, 0x62, 0x75, 0x67, 0x55, 0x6e, 0x72, 0x6f, 0x75, 0x74, 0x65,
|
||||
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xdc, 0x4e, 0x12, 0x1d,
|
||||
0x0a, 0x18, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x51, 0x75, 0x69, 0x65, 0x73, 0x63, 0x65, 0x52,
|
||||
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xdd, 0x4e, 0x12, 0x1f, 0x0a,
|
||||
0x1a, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x44, 0x65, 0x71, 0x75, 0x69, 0x65, 0x73, 0x63, 0x65,
|
||||
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xde, 0x4e, 0x12, 0x22,
|
||||
0x0a, 0x1d, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x44, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x73,
|
||||
0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10,
|
||||
0xdf, 0x4e, 0x12, 0x1f, 0x0a, 0x1a, 0x52, 0x61, 0x66, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65,
|
||||
0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65,
|
||||
0x10, 0xe0, 0x4e, 0x12, 0x20, 0x0a, 0x1b, 0x52, 0x61, 0x66, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x4d,
|
||||
0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79,
|
||||
0x70, 0x65, 0x10, 0xe1, 0x4e, 0x12, 0x1b, 0x0a, 0x16, 0x52, 0x61, 0x66, 0x74, 0x41, 0x64, 0x64,
|
||||
0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10,
|
||||
0xe2, 0x4e, 0x12, 0x1e, 0x0a, 0x19, 0x52, 0x61, 0x66, 0x74, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65,
|
||||
0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10,
|
||||
0xe3, 0x4e, 0x12, 0x26, 0x0a, 0x21, 0x52, 0x61, 0x66, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66,
|
||||
0x65, 0x72, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x52, 0x65, 0x71, 0x75,
|
||||
0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xe4, 0x4e, 0x12, 0x13, 0x0a, 0x0e, 0x52, 0x61,
|
||||
0x66, 0x74, 0x49, 0x6e, 0x69, 0x74, 0x46, 0x72, 0x6f, 0x6d, 0x44, 0x62, 0x10, 0xe5, 0x4e, 0x12,
|
||||
0x23, 0x0a, 0x1e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x72, 0x6d, 0x69,
|
||||
0x6e, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70,
|
||||
0x65, 0x10, 0xf4, 0x4e, 0x12, 0x23, 0x0a, 0x1e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65,
|
||||
0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
|
||||
0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x10, 0xf5, 0x4e, 0x12, 0x21, 0x0a, 0x1c, 0x56, 0x61, 0x6c,
|
||||
0x69, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x52,
|
||||
0x65, 0x73, 0x75, 0x6c, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xf6, 0x4e, 0x12, 0x23, 0x0a, 0x1e,
|
||||
0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x4c, 0x69,
|
||||
0x6e, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xf7,
|
||||
0x4e, 0x12, 0x24, 0x0a, 0x1f, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x75,
|
||||
0x74, 0x65, 0x72, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
|
||||
0x54, 0x79, 0x70, 0x65, 0x10, 0xf8, 0x4e, 0x12, 0x22, 0x0a, 0x1d, 0x56, 0x61, 0x6c, 0x69, 0x64,
|
||||
0x61, 0x74, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x52, 0x65,
|
||||
0x73, 0x75, 0x6c, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xf9, 0x4e, 0x2a, 0x53, 0x0a, 0x06, 0x48,
|
||||
0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x0a, 0x4e, 0x6f, 0x6e, 0x65, 0x48, 0x65, 0x61,
|
||||
0x64, 0x65, 0x72, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79,
|
||||
0x70, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x10, 0x0a, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x74,
|
||||
0x72, 0x6c, 0x43, 0x68, 0x61, 0x6e, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x10, 0x0b, 0x12, 0x10,
|
||||
0x0a, 0x0c, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x10, 0x0c,
|
||||
0x2a, 0x78, 0x0a, 0x16, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69,
|
||||
0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x69,
|
||||
0x72, 0x63, 0x75, 0x69, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x10, 0x00, 0x12, 0x12,
|
||||
0x0a, 0x0e, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64,
|
||||
0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x50, 0x72, 0x65,
|
||||
0x73, 0x65, 0x6e, 0x74, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x50, 0x61, 0x74, 0x68, 0x55, 0x70,
|
||||
0x64, 0x61, 0x74, 0x65, 0x64, 0x10, 0x03, 0x12, 0x11, 0x0a, 0x0d, 0x43, 0x69, 0x72, 0x63, 0x75,
|
||||
0x69, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x10, 0x04, 0x2a, 0x2b, 0x0a, 0x0f, 0x54, 0x72,
|
||||
0x61, 0x63, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a,
|
||||
0x07, 0x45, 0x58, 0x43, 0x4c, 0x55, 0x44, 0x45, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e,
|
||||
0x43, 0x4c, 0x55, 0x44, 0x45, 0x10, 0x01, 0x2a, 0x77, 0x0a, 0x0f, 0x54, 0x65, 0x72, 0x6d, 0x69,
|
||||
0x6e, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x56, 0x61,
|
||||
0x6c, 0x69, 0x64, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e,
|
||||
0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x55, 0x6e, 0x6b,
|
||||
0x6e, 0x6f, 0x77, 0x6e, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x10, 0x02, 0x12, 0x1c, 0x0a,
|
||||
0x18, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x54,
|
||||
0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x10, 0x03, 0x12, 0x13, 0x0a, 0x0f, 0x49,
|
||||
0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x42, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x10, 0x04,
|
||||
0x2a, 0x53, 0x0a, 0x09, 0x4c, 0x69, 0x6e, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0f, 0x0a,
|
||||
0x0b, 0x4c, 0x69, 0x6e, 0x6b, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x10, 0x00, 0x12, 0x13,
|
||||
0x0a, 0x0f, 0x4c, 0x69, 0x6e, 0x6b, 0x45, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65,
|
||||
0x64, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x4c, 0x69, 0x6e, 0x6b, 0x50, 0x65, 0x6e, 0x64, 0x69,
|
||||
0x6e, 0x67, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x4c, 0x69, 0x6e, 0x6b, 0x44, 0x69, 0x61, 0x6c,
|
||||
0x69, 0x6e, 0x67, 0x10, 0x03, 0x42, 0x27, 0x5a, 0x25, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e,
|
||||
0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x7a, 0x69, 0x74, 0x69, 0x2f, 0x66, 0x61, 0x62,
|
||||
0x72, 0x69, 0x63, 0x2f, 0x70, 0x62, 0x2f, 0x6d, 0x67, 0x6d, 0x74, 0x5f, 0x70, 0x62, 0x62, 0x06,
|
||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
0x6c, 0x65, 0x64, 0x22, 0x3d, 0x0a, 0x23, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52,
|
||||
0x6f, 0x75, 0x74, 0x65, 0x72, 0x53, 0x64, 0x6b, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74,
|
||||
0x6f, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69,
|
||||
0x6c, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74,
|
||||
0x65, 0x72, 0x22, 0x7c, 0x0a, 0x24, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f,
|
||||
0x75, 0x74, 0x65, 0x72, 0x53, 0x64, 0x6b, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f,
|
||||
0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75,
|
||||
0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63,
|
||||
0x63, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18,
|
||||
0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20,
|
||||
0x0a, 0x0b, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20,
|
||||
0x01, 0x28, 0x04, 0x52, 0x0b, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74,
|
||||
0x22, 0xe0, 0x01, 0x0a, 0x1b, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x53, 0x64, 0x6b, 0x54, 0x65,
|
||||
0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73,
|
||||
0x12, 0x1a, 0x0a, 0x08, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01,
|
||||
0x28, 0x09, 0x52, 0x08, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a,
|
||||
0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
|
||||
0x52, 0x0a, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0f,
|
||||
0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18,
|
||||
0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53,
|
||||
0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67,
|
||||
0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
|
||||
0x12, 0x41, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28,
|
||||
0x0b, 0x32, 0x27, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x5f, 0x70, 0x62,
|
||||
0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x53, 0x64, 0x6b, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e,
|
||||
0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61,
|
||||
0x69, 0x6c, 0x73, 0x22, 0xa6, 0x02, 0x0a, 0x19, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x53, 0x64,
|
||||
0x6b, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x74, 0x61, 0x69,
|
||||
0x6c, 0x12, 0x22, 0x0a, 0x0c, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x49,
|
||||
0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61,
|
||||
0x74, 0x6f, 0x72, 0x49, 0x64, 0x12, 0x3b, 0x0a, 0x09, 0x63, 0x74, 0x72, 0x6c, 0x53, 0x74, 0x61,
|
||||
0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x7a, 0x69, 0x74, 0x69, 0x2e,
|
||||
0x6d, 0x67, 0x6d, 0x74, 0x5f, 0x70, 0x62, 0x2e, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74,
|
||||
0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x09, 0x63, 0x74, 0x72, 0x6c, 0x53, 0x74, 0x61,
|
||||
0x74, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74,
|
||||
0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x53,
|
||||
0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x18,
|
||||
0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x12, 0x2a,
|
||||
0x0a, 0x10, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69,
|
||||
0x76, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x61,
|
||||
0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x72,
|
||||
0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a,
|
||||
0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x6c, 0x61,
|
||||
0x73, 0x74, 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52,
|
||||
0x0b, 0x6c, 0x61, 0x73, 0x74, 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x2a, 0x9f, 0x09, 0x0a,
|
||||
0x0b, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04,
|
||||
0x5a, 0x65, 0x72, 0x6f, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x17, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d,
|
||||
0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70,
|
||||
0x65, 0x10, 0xb8, 0x4e, 0x12, 0x1a, 0x0a, 0x15, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76,
|
||||
0x65, 0x6e, 0x74, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xb9, 0x4e,
|
||||
0x12, 0x20, 0x0a, 0x1b, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x50, 0x69, 0x70, 0x65, 0x54, 0x72,
|
||||
0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10,
|
||||
0xbc, 0x4e, 0x12, 0x23, 0x0a, 0x1e, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x43, 0x69, 0x72, 0x63,
|
||||
0x75, 0x69, 0x74, 0x54, 0x72, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
|
||||
0x54, 0x79, 0x70, 0x65, 0x10, 0xbd, 0x4e, 0x12, 0x1c, 0x0a, 0x17, 0x53, 0x74, 0x72, 0x65, 0x61,
|
||||
0x6d, 0x54, 0x72, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79,
|
||||
0x70, 0x65, 0x10, 0xbe, 0x4e, 0x12, 0x1a, 0x0a, 0x15, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x54,
|
||||
0x72, 0x61, 0x63, 0x65, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xbf,
|
||||
0x4e, 0x12, 0x17, 0x0a, 0x12, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75,
|
||||
0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xc0, 0x4e, 0x12, 0x18, 0x0a, 0x13, 0x49, 0x6e,
|
||||
0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70,
|
||||
0x65, 0x10, 0xc1, 0x4e, 0x12, 0x1a, 0x0a, 0x15, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74,
|
||||
0x44, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xd6, 0x4e,
|
||||
0x12, 0x25, 0x0a, 0x20, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x44, 0x65, 0x62, 0x75, 0x67, 0x46,
|
||||
0x6f, 0x72, 0x67, 0x65, 0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
|
||||
0x54, 0x79, 0x70, 0x65, 0x10, 0xd7, 0x4e, 0x12, 0x2c, 0x0a, 0x27, 0x52, 0x6f, 0x75, 0x74, 0x65,
|
||||
0x72, 0x44, 0x65, 0x62, 0x75, 0x67, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x43, 0x74, 0x72, 0x6c,
|
||||
0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79,
|
||||
0x70, 0x65, 0x10, 0xd8, 0x4e, 0x12, 0x26, 0x0a, 0x21, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x44,
|
||||
0x65, 0x62, 0x75, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52,
|
||||
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xd9, 0x4e, 0x12, 0x2e, 0x0a,
|
||||
0x29, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x44, 0x65, 0x62, 0x75, 0x67, 0x44, 0x75, 0x6d, 0x70,
|
||||
0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x65, 0x72, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52,
|
||||
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xda, 0x4e, 0x12, 0x24, 0x0a,
|
||||
0x1f, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x44, 0x65, 0x62, 0x75, 0x67, 0x44, 0x75, 0x6d, 0x70,
|
||||
0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65,
|
||||
0x10, 0xdb, 0x4e, 0x12, 0x22, 0x0a, 0x1d, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x44, 0x65, 0x62,
|
||||
0x75, 0x67, 0x55, 0x6e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
|
||||
0x54, 0x79, 0x70, 0x65, 0x10, 0xdc, 0x4e, 0x12, 0x1d, 0x0a, 0x18, 0x52, 0x6f, 0x75, 0x74, 0x65,
|
||||
0x72, 0x51, 0x75, 0x69, 0x65, 0x73, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54,
|
||||
0x79, 0x70, 0x65, 0x10, 0xdd, 0x4e, 0x12, 0x1f, 0x0a, 0x1a, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72,
|
||||
0x44, 0x65, 0x71, 0x75, 0x69, 0x65, 0x73, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
|
||||
0x54, 0x79, 0x70, 0x65, 0x10, 0xde, 0x4e, 0x12, 0x22, 0x0a, 0x1d, 0x52, 0x6f, 0x75, 0x74, 0x65,
|
||||
0x72, 0x44, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71,
|
||||
0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xdf, 0x4e, 0x12, 0x1f, 0x0a, 0x1a, 0x52,
|
||||
0x61, 0x66, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65,
|
||||
0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xe0, 0x4e, 0x12, 0x20, 0x0a, 0x1b,
|
||||
0x52, 0x61, 0x66, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52,
|
||||
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x10, 0xe1, 0x4e, 0x12, 0x1b,
|
||||
0x0a, 0x16, 0x52, 0x61, 0x66, 0x74, 0x41, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71,
|
||||
0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xe2, 0x4e, 0x12, 0x1e, 0x0a, 0x19, 0x52,
|
||||
0x61, 0x66, 0x74, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71,
|
||||
0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xe3, 0x4e, 0x12, 0x26, 0x0a, 0x21, 0x52,
|
||||
0x61, 0x66, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x64, 0x65,
|
||||
0x72, 0x73, 0x68, 0x69, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65,
|
||||
0x10, 0xe4, 0x4e, 0x12, 0x13, 0x0a, 0x0e, 0x52, 0x61, 0x66, 0x74, 0x49, 0x6e, 0x69, 0x74, 0x46,
|
||||
0x72, 0x6f, 0x6d, 0x44, 0x62, 0x10, 0xe5, 0x4e, 0x12, 0x23, 0x0a, 0x1e, 0x56, 0x61, 0x6c, 0x69,
|
||||
0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x52,
|
||||
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xf4, 0x4e, 0x12, 0x23, 0x0a,
|
||||
0x1e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61,
|
||||
0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x10,
|
||||
0xf5, 0x4e, 0x12, 0x21, 0x0a, 0x1c, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65,
|
||||
0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x54, 0x79,
|
||||
0x70, 0x65, 0x10, 0xf6, 0x4e, 0x12, 0x23, 0x0a, 0x1e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74,
|
||||
0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75,
|
||||
0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xf7, 0x4e, 0x12, 0x24, 0x0a, 0x1f, 0x56, 0x61,
|
||||
0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x4c, 0x69, 0x6e, 0x6b,
|
||||
0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x10, 0xf8, 0x4e,
|
||||
0x12, 0x22, 0x0a, 0x1d, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x75, 0x74,
|
||||
0x65, 0x72, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x54, 0x79, 0x70,
|
||||
0x65, 0x10, 0xf9, 0x4e, 0x12, 0x2c, 0x0a, 0x27, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65,
|
||||
0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x53, 0x64, 0x6b, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61,
|
||||
0x74, 0x6f, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10,
|
||||
0xfa, 0x4e, 0x12, 0x2d, 0x0a, 0x28, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f,
|
||||
0x75, 0x74, 0x65, 0x72, 0x53, 0x64, 0x6b, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f,
|
||||
0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x10, 0xfb,
|
||||
0x4e, 0x12, 0x2b, 0x0a, 0x26, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x75,
|
||||
0x74, 0x65, 0x72, 0x53, 0x64, 0x6b, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72,
|
||||
0x73, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0xfc, 0x4e, 0x2a, 0x53,
|
||||
0x0a, 0x06, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x0a, 0x4e, 0x6f, 0x6e, 0x65,
|
||||
0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x45, 0x76, 0x65, 0x6e,
|
||||
0x74, 0x54, 0x79, 0x70, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x10, 0x0a, 0x12, 0x12, 0x0a,
|
||||
0x0e, 0x43, 0x74, 0x72, 0x6c, 0x43, 0x68, 0x61, 0x6e, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x10,
|
||||
0x0b, 0x12, 0x10, 0x0a, 0x0c, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x49,
|
||||
0x64, 0x10, 0x0c, 0x2a, 0x78, 0x0a, 0x16, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x69, 0x72,
|
||||
0x63, 0x75, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a,
|
||||
0x0e, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x10,
|
||||
0x00, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x44, 0x65, 0x6c, 0x65,
|
||||
0x74, 0x65, 0x64, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74,
|
||||
0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x50, 0x61, 0x74,
|
||||
0x68, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x10, 0x03, 0x12, 0x11, 0x0a, 0x0d, 0x43, 0x69,
|
||||
0x72, 0x63, 0x75, 0x69, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x10, 0x04, 0x2a, 0x2b, 0x0a,
|
||||
0x0f, 0x54, 0x72, 0x61, 0x63, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65,
|
||||
0x12, 0x0b, 0x0a, 0x07, 0x45, 0x58, 0x43, 0x4c, 0x55, 0x44, 0x45, 0x10, 0x00, 0x12, 0x0b, 0x0a,
|
||||
0x07, 0x49, 0x4e, 0x43, 0x4c, 0x55, 0x44, 0x45, 0x10, 0x01, 0x2a, 0x77, 0x0a, 0x0f, 0x54, 0x65,
|
||||
0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x09, 0x0a,
|
||||
0x05, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x6e, 0x6b, 0x6e,
|
||||
0x6f, 0x77, 0x6e, 0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64,
|
||||
0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x10, 0x02,
|
||||
0x12, 0x1c, 0x0a, 0x18, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x55, 0x6e, 0x6b, 0x6e, 0x6f,
|
||||
0x77, 0x6e, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x10, 0x03, 0x12, 0x13,
|
||||
0x0a, 0x0f, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x42, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74,
|
||||
0x65, 0x10, 0x04, 0x2a, 0x53, 0x0a, 0x09, 0x4c, 0x69, 0x6e, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x65,
|
||||
0x12, 0x0f, 0x0a, 0x0b, 0x4c, 0x69, 0x6e, 0x6b, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x10,
|
||||
0x00, 0x12, 0x13, 0x0a, 0x0f, 0x4c, 0x69, 0x6e, 0x6b, 0x45, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x69,
|
||||
0x73, 0x68, 0x65, 0x64, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x4c, 0x69, 0x6e, 0x6b, 0x50, 0x65,
|
||||
0x6e, 0x64, 0x69, 0x6e, 0x67, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x4c, 0x69, 0x6e, 0x6b, 0x44,
|
||||
0x69, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x10, 0x03, 0x42, 0x27, 0x5a, 0x25, 0x67, 0x69, 0x74, 0x68,
|
||||
0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x7a, 0x69, 0x74, 0x69, 0x2f,
|
||||
0x66, 0x61, 0x62, 0x72, 0x69, 0x63, 0x2f, 0x70, 0x62, 0x2f, 0x6d, 0x67, 0x6d, 0x74, 0x5f, 0x70,
|
||||
0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
}
|
||||
|
||||
var (
|
||||
@@ -2184,66 +2530,72 @@ func file_mgmt_proto_rawDescGZIP() []byte {
|
||||
}
|
||||
|
||||
var file_mgmt_proto_enumTypes = make([]protoimpl.EnumInfo, 6)
|
||||
var file_mgmt_proto_msgTypes = make([]protoimpl.MessageInfo, 25)
|
||||
var file_mgmt_proto_msgTypes = make([]protoimpl.MessageInfo, 29)
|
||||
var file_mgmt_proto_goTypes = []interface{}{
|
||||
(ContentType)(0), // 0: ziti.mgmt_pb.ContentType
|
||||
(Header)(0), // 1: ziti.mgmt_pb.Header
|
||||
(StreamCircuitEventType)(0), // 2: ziti.mgmt_pb.StreamCircuitEventType
|
||||
(TraceFilterType)(0), // 3: ziti.mgmt_pb.TraceFilterType
|
||||
(TerminatorState)(0), // 4: ziti.mgmt_pb.TerminatorState
|
||||
(LinkState)(0), // 5: ziti.mgmt_pb.LinkState
|
||||
(*StreamMetricsRequest)(nil), // 6: ziti.mgmt_pb.StreamMetricsRequest
|
||||
(*StreamMetricsEvent)(nil), // 7: ziti.mgmt_pb.StreamMetricsEvent
|
||||
(*Path)(nil), // 8: ziti.mgmt_pb.Path
|
||||
(*StreamCircuitsEvent)(nil), // 9: ziti.mgmt_pb.StreamCircuitsEvent
|
||||
(*ToggleCircuitTracesRequest)(nil), // 10: ziti.mgmt_pb.ToggleCircuitTracesRequest
|
||||
(*StreamTracesRequest)(nil), // 11: ziti.mgmt_pb.StreamTracesRequest
|
||||
(*InspectRequest)(nil), // 12: ziti.mgmt_pb.InspectRequest
|
||||
(*InspectResponse)(nil), // 13: ziti.mgmt_pb.InspectResponse
|
||||
(*RaftMember)(nil), // 14: ziti.mgmt_pb.RaftMember
|
||||
(*RaftMemberListResponse)(nil), // 15: ziti.mgmt_pb.RaftMemberListResponse
|
||||
(*ValidateTerminatorsRequest)(nil), // 16: ziti.mgmt_pb.ValidateTerminatorsRequest
|
||||
(*ValidateTerminatorsResponse)(nil), // 17: ziti.mgmt_pb.ValidateTerminatorsResponse
|
||||
(*TerminatorDetail)(nil), // 18: ziti.mgmt_pb.TerminatorDetail
|
||||
(*ValidateRouterLinksRequest)(nil), // 19: ziti.mgmt_pb.ValidateRouterLinksRequest
|
||||
(*ValidateRouterLinksResponse)(nil), // 20: ziti.mgmt_pb.ValidateRouterLinksResponse
|
||||
(*RouterLinkDetails)(nil), // 21: ziti.mgmt_pb.RouterLinkDetails
|
||||
(*RouterLinkDetail)(nil), // 22: ziti.mgmt_pb.RouterLinkDetail
|
||||
(*StreamMetricsRequest_MetricMatcher)(nil), // 23: ziti.mgmt_pb.StreamMetricsRequest.MetricMatcher
|
||||
nil, // 24: ziti.mgmt_pb.StreamMetricsEvent.TagsEntry
|
||||
nil, // 25: ziti.mgmt_pb.StreamMetricsEvent.IntMetricsEntry
|
||||
nil, // 26: ziti.mgmt_pb.StreamMetricsEvent.FloatMetricsEntry
|
||||
(*StreamMetricsEvent_IntervalMetric)(nil), // 27: ziti.mgmt_pb.StreamMetricsEvent.IntervalMetric
|
||||
nil, // 28: ziti.mgmt_pb.StreamMetricsEvent.MetricGroupEntry
|
||||
nil, // 29: ziti.mgmt_pb.StreamMetricsEvent.IntervalMetric.ValuesEntry
|
||||
(*InspectResponse_InspectValue)(nil), // 30: ziti.mgmt_pb.InspectResponse.InspectValue
|
||||
(*timestamppb.Timestamp)(nil), // 31: google.protobuf.Timestamp
|
||||
(ContentType)(0), // 0: ziti.mgmt_pb.ContentType
|
||||
(Header)(0), // 1: ziti.mgmt_pb.Header
|
||||
(StreamCircuitEventType)(0), // 2: ziti.mgmt_pb.StreamCircuitEventType
|
||||
(TraceFilterType)(0), // 3: ziti.mgmt_pb.TraceFilterType
|
||||
(TerminatorState)(0), // 4: ziti.mgmt_pb.TerminatorState
|
||||
(LinkState)(0), // 5: ziti.mgmt_pb.LinkState
|
||||
(*StreamMetricsRequest)(nil), // 6: ziti.mgmt_pb.StreamMetricsRequest
|
||||
(*StreamMetricsEvent)(nil), // 7: ziti.mgmt_pb.StreamMetricsEvent
|
||||
(*Path)(nil), // 8: ziti.mgmt_pb.Path
|
||||
(*StreamCircuitsEvent)(nil), // 9: ziti.mgmt_pb.StreamCircuitsEvent
|
||||
(*ToggleCircuitTracesRequest)(nil), // 10: ziti.mgmt_pb.ToggleCircuitTracesRequest
|
||||
(*StreamTracesRequest)(nil), // 11: ziti.mgmt_pb.StreamTracesRequest
|
||||
(*InspectRequest)(nil), // 12: ziti.mgmt_pb.InspectRequest
|
||||
(*InspectResponse)(nil), // 13: ziti.mgmt_pb.InspectResponse
|
||||
(*RaftMember)(nil), // 14: ziti.mgmt_pb.RaftMember
|
||||
(*RaftMemberListResponse)(nil), // 15: ziti.mgmt_pb.RaftMemberListResponse
|
||||
(*ValidateTerminatorsRequest)(nil), // 16: ziti.mgmt_pb.ValidateTerminatorsRequest
|
||||
(*ValidateTerminatorsResponse)(nil), // 17: ziti.mgmt_pb.ValidateTerminatorsResponse
|
||||
(*TerminatorDetail)(nil), // 18: ziti.mgmt_pb.TerminatorDetail
|
||||
(*ValidateRouterLinksRequest)(nil), // 19: ziti.mgmt_pb.ValidateRouterLinksRequest
|
||||
(*ValidateRouterLinksResponse)(nil), // 20: ziti.mgmt_pb.ValidateRouterLinksResponse
|
||||
(*RouterLinkDetails)(nil), // 21: ziti.mgmt_pb.RouterLinkDetails
|
||||
(*RouterLinkDetail)(nil), // 22: ziti.mgmt_pb.RouterLinkDetail
|
||||
(*ValidateRouterSdkTerminatorsRequest)(nil), // 23: ziti.mgmt_pb.ValidateRouterSdkTerminatorsRequest
|
||||
(*ValidateRouterSdkTerminatorsResponse)(nil), // 24: ziti.mgmt_pb.ValidateRouterSdkTerminatorsResponse
|
||||
(*RouterSdkTerminatorsDetails)(nil), // 25: ziti.mgmt_pb.RouterSdkTerminatorsDetails
|
||||
(*RouterSdkTerminatorDetail)(nil), // 26: ziti.mgmt_pb.RouterSdkTerminatorDetail
|
||||
(*StreamMetricsRequest_MetricMatcher)(nil), // 27: ziti.mgmt_pb.StreamMetricsRequest.MetricMatcher
|
||||
nil, // 28: ziti.mgmt_pb.StreamMetricsEvent.TagsEntry
|
||||
nil, // 29: ziti.mgmt_pb.StreamMetricsEvent.IntMetricsEntry
|
||||
nil, // 30: ziti.mgmt_pb.StreamMetricsEvent.FloatMetricsEntry
|
||||
(*StreamMetricsEvent_IntervalMetric)(nil), // 31: ziti.mgmt_pb.StreamMetricsEvent.IntervalMetric
|
||||
nil, // 32: ziti.mgmt_pb.StreamMetricsEvent.MetricGroupEntry
|
||||
nil, // 33: ziti.mgmt_pb.StreamMetricsEvent.IntervalMetric.ValuesEntry
|
||||
(*InspectResponse_InspectValue)(nil), // 34: ziti.mgmt_pb.InspectResponse.InspectValue
|
||||
(*timestamppb.Timestamp)(nil), // 35: google.protobuf.Timestamp
|
||||
}
|
||||
var file_mgmt_proto_depIdxs = []int32{
|
||||
23, // 0: ziti.mgmt_pb.StreamMetricsRequest.matchers:type_name -> ziti.mgmt_pb.StreamMetricsRequest.MetricMatcher
|
||||
31, // 1: ziti.mgmt_pb.StreamMetricsEvent.timestamp:type_name -> google.protobuf.Timestamp
|
||||
24, // 2: ziti.mgmt_pb.StreamMetricsEvent.tags:type_name -> ziti.mgmt_pb.StreamMetricsEvent.TagsEntry
|
||||
25, // 3: ziti.mgmt_pb.StreamMetricsEvent.intMetrics:type_name -> ziti.mgmt_pb.StreamMetricsEvent.IntMetricsEntry
|
||||
26, // 4: ziti.mgmt_pb.StreamMetricsEvent.floatMetrics:type_name -> ziti.mgmt_pb.StreamMetricsEvent.FloatMetricsEntry
|
||||
27, // 5: ziti.mgmt_pb.StreamMetricsEvent.intervalMetrics:type_name -> ziti.mgmt_pb.StreamMetricsEvent.IntervalMetric
|
||||
28, // 6: ziti.mgmt_pb.StreamMetricsEvent.metricGroup:type_name -> ziti.mgmt_pb.StreamMetricsEvent.MetricGroupEntry
|
||||
27, // 0: ziti.mgmt_pb.StreamMetricsRequest.matchers:type_name -> ziti.mgmt_pb.StreamMetricsRequest.MetricMatcher
|
||||
35, // 1: ziti.mgmt_pb.StreamMetricsEvent.timestamp:type_name -> google.protobuf.Timestamp
|
||||
28, // 2: ziti.mgmt_pb.StreamMetricsEvent.tags:type_name -> ziti.mgmt_pb.StreamMetricsEvent.TagsEntry
|
||||
29, // 3: ziti.mgmt_pb.StreamMetricsEvent.intMetrics:type_name -> ziti.mgmt_pb.StreamMetricsEvent.IntMetricsEntry
|
||||
30, // 4: ziti.mgmt_pb.StreamMetricsEvent.floatMetrics:type_name -> ziti.mgmt_pb.StreamMetricsEvent.FloatMetricsEntry
|
||||
31, // 5: ziti.mgmt_pb.StreamMetricsEvent.intervalMetrics:type_name -> ziti.mgmt_pb.StreamMetricsEvent.IntervalMetric
|
||||
32, // 6: ziti.mgmt_pb.StreamMetricsEvent.metricGroup:type_name -> ziti.mgmt_pb.StreamMetricsEvent.MetricGroupEntry
|
||||
2, // 7: ziti.mgmt_pb.StreamCircuitsEvent.eventType:type_name -> ziti.mgmt_pb.StreamCircuitEventType
|
||||
8, // 8: ziti.mgmt_pb.StreamCircuitsEvent.path:type_name -> ziti.mgmt_pb.Path
|
||||
3, // 9: ziti.mgmt_pb.StreamTracesRequest.filterType:type_name -> ziti.mgmt_pb.TraceFilterType
|
||||
30, // 10: ziti.mgmt_pb.InspectResponse.values:type_name -> ziti.mgmt_pb.InspectResponse.InspectValue
|
||||
34, // 10: ziti.mgmt_pb.InspectResponse.values:type_name -> ziti.mgmt_pb.InspectResponse.InspectValue
|
||||
14, // 11: ziti.mgmt_pb.RaftMemberListResponse.members:type_name -> ziti.mgmt_pb.RaftMember
|
||||
4, // 12: ziti.mgmt_pb.TerminatorDetail.state:type_name -> ziti.mgmt_pb.TerminatorState
|
||||
22, // 13: ziti.mgmt_pb.RouterLinkDetails.linkDetails:type_name -> ziti.mgmt_pb.RouterLinkDetail
|
||||
5, // 14: ziti.mgmt_pb.RouterLinkDetail.ctrlState:type_name -> ziti.mgmt_pb.LinkState
|
||||
5, // 15: ziti.mgmt_pb.RouterLinkDetail.routerState:type_name -> ziti.mgmt_pb.LinkState
|
||||
31, // 16: ziti.mgmt_pb.StreamMetricsEvent.IntervalMetric.intervalStartUTC:type_name -> google.protobuf.Timestamp
|
||||
31, // 17: ziti.mgmt_pb.StreamMetricsEvent.IntervalMetric.intervalEndUTC:type_name -> google.protobuf.Timestamp
|
||||
29, // 18: ziti.mgmt_pb.StreamMetricsEvent.IntervalMetric.values:type_name -> ziti.mgmt_pb.StreamMetricsEvent.IntervalMetric.ValuesEntry
|
||||
19, // [19:19] is the sub-list for method output_type
|
||||
19, // [19:19] is the sub-list for method input_type
|
||||
19, // [19:19] is the sub-list for extension type_name
|
||||
19, // [19:19] is the sub-list for extension extendee
|
||||
0, // [0:19] is the sub-list for field type_name
|
||||
26, // 16: ziti.mgmt_pb.RouterSdkTerminatorsDetails.details:type_name -> ziti.mgmt_pb.RouterSdkTerminatorDetail
|
||||
4, // 17: ziti.mgmt_pb.RouterSdkTerminatorDetail.ctrlState:type_name -> ziti.mgmt_pb.TerminatorState
|
||||
35, // 18: ziti.mgmt_pb.StreamMetricsEvent.IntervalMetric.intervalStartUTC:type_name -> google.protobuf.Timestamp
|
||||
35, // 19: ziti.mgmt_pb.StreamMetricsEvent.IntervalMetric.intervalEndUTC:type_name -> google.protobuf.Timestamp
|
||||
33, // 20: ziti.mgmt_pb.StreamMetricsEvent.IntervalMetric.values:type_name -> ziti.mgmt_pb.StreamMetricsEvent.IntervalMetric.ValuesEntry
|
||||
21, // [21:21] is the sub-list for method output_type
|
||||
21, // [21:21] is the sub-list for method input_type
|
||||
21, // [21:21] is the sub-list for extension type_name
|
||||
21, // [21:21] is the sub-list for extension extendee
|
||||
0, // [0:21] is the sub-list for field type_name
|
||||
}
|
||||
|
||||
func init() { file_mgmt_proto_init() }
|
||||
@@ -2457,7 +2809,43 @@ func file_mgmt_proto_init() {
|
||||
}
|
||||
}
|
||||
file_mgmt_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*StreamMetricsRequest_MetricMatcher); i {
|
||||
switch v := v.(*ValidateRouterSdkTerminatorsRequest); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
return &v.sizeCache
|
||||
case 2:
|
||||
return &v.unknownFields
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
file_mgmt_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*ValidateRouterSdkTerminatorsResponse); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
return &v.sizeCache
|
||||
case 2:
|
||||
return &v.unknownFields
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
file_mgmt_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*RouterSdkTerminatorsDetails); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
return &v.sizeCache
|
||||
case 2:
|
||||
return &v.unknownFields
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
file_mgmt_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*RouterSdkTerminatorDetail); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
@@ -2469,6 +2857,18 @@ func file_mgmt_proto_init() {
|
||||
}
|
||||
}
|
||||
file_mgmt_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*StreamMetricsRequest_MetricMatcher); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
return &v.sizeCache
|
||||
case 2:
|
||||
return &v.unknownFields
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
file_mgmt_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*StreamMetricsEvent_IntervalMetric); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
@@ -2480,7 +2880,7 @@ func file_mgmt_proto_init() {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
file_mgmt_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
|
||||
file_mgmt_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*InspectResponse_InspectValue); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
@@ -2500,7 +2900,7 @@ func file_mgmt_proto_init() {
|
||||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
||||
RawDescriptor: file_mgmt_proto_rawDesc,
|
||||
NumEnums: 6,
|
||||
NumMessages: 25,
|
||||
NumMessages: 29,
|
||||
NumExtensions: 0,
|
||||
NumServices: 0,
|
||||
},
|
||||
|
||||
@@ -54,6 +54,10 @@ enum ContentType {
|
||||
ValidateRouterLinksResponseType = 10104;
|
||||
ValidateRouterLinksResultType = 10105;
|
||||
|
||||
ValidateRouterSdkTerminatorsRequestType = 10106;
|
||||
ValidateRouterSdkTerminatorsResponseType = 10107;
|
||||
ValidateRouterSdkTerminatorsResultType = 10108;
|
||||
|
||||
}
|
||||
|
||||
enum Header {
|
||||
@@ -237,3 +241,31 @@ message RouterLinkDetail {
|
||||
string destRouterId = 6;
|
||||
bool dialed = 7;
|
||||
}
|
||||
|
||||
message ValidateRouterSdkTerminatorsRequest {
|
||||
string filter = 1;
|
||||
}
|
||||
|
||||
message ValidateRouterSdkTerminatorsResponse {
|
||||
bool success = 1;
|
||||
string message = 2;
|
||||
uint64 routerCount = 3;
|
||||
}
|
||||
|
||||
message RouterSdkTerminatorsDetails {
|
||||
string routerId = 1;
|
||||
string routerName = 2;
|
||||
bool validateSuccess = 3;
|
||||
string message = 4;
|
||||
repeated RouterSdkTerminatorDetail details = 5;
|
||||
}
|
||||
|
||||
message RouterSdkTerminatorDetail {
|
||||
string terminatorId = 1;
|
||||
TerminatorState ctrlState = 2;
|
||||
string routerState = 3;
|
||||
bool isValid = 4;
|
||||
bool operaationActive = 5;
|
||||
string createTime = 6;
|
||||
string lastAttempt = 7;
|
||||
}
|
||||
@@ -1,59 +0,0 @@
|
||||
/*
|
||||
Copyright NetFoundry Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
https://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package profiler
|
||||
|
||||
import (
|
||||
"github.com/michaelquigley/pfxlog"
|
||||
"os"
|
||||
"os/signal"
|
||||
"runtime/pprof"
|
||||
"syscall"
|
||||
)
|
||||
|
||||
type CPU struct {
|
||||
path string
|
||||
shutdownC chan struct{}
|
||||
}
|
||||
|
||||
func NewCPU(path string) (*CPU, error) {
|
||||
return NewCPUWithShutdown(path, nil)
|
||||
}
|
||||
|
||||
func NewCPUWithShutdown(path string, shutdownC chan struct{}) (*CPU, error) {
|
||||
f, err := os.Create(path)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := pprof.StartCPUProfile(f); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
pfxlog.Logger().Infof("cpu profiling to [%s]", path)
|
||||
return &CPU{path: path, shutdownC: shutdownC}, nil
|
||||
}
|
||||
|
||||
func (cpu *CPU) Run() {
|
||||
signalChan := make(chan os.Signal, 1)
|
||||
signal.Notify(signalChan, syscall.SIGUSR2)
|
||||
|
||||
select {
|
||||
case <-signalChan:
|
||||
case <-cpu.shutdownC:
|
||||
}
|
||||
|
||||
pprof.StopCPUProfile()
|
||||
pfxlog.Logger().Info("stopped profiling cpu")
|
||||
}
|
||||
@@ -1,3 +1,5 @@
|
||||
//go:build linux || darwin || freebsd
|
||||
|
||||
/*
|
||||
Copyright NetFoundry Inc.
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
//go:build windows
|
||||
|
||||
/*
|
||||
Copyright NetFoundry Inc.
|
||||
|
||||
|
||||
@@ -0,0 +1,82 @@
|
||||
/*
|
||||
Copyright NetFoundry Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
https://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package spa_handler
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type SinglePageAppHandler struct {
|
||||
HttpHandler http.Handler
|
||||
BindingKey string
|
||||
}
|
||||
|
||||
func (spa *SinglePageAppHandler) Binding() string {
|
||||
return spa.BindingKey
|
||||
}
|
||||
|
||||
func (spa *SinglePageAppHandler) Options() map[interface{}]interface{} {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (spa *SinglePageAppHandler) RootPath() string {
|
||||
return "/" + spa.BindingKey
|
||||
}
|
||||
|
||||
func (spa *SinglePageAppHandler) IsHandler(r *http.Request) bool {
|
||||
return strings.HasPrefix(r.URL.Path, spa.RootPath()) || strings.HasPrefix(r.URL.Path, "/assets")
|
||||
}
|
||||
|
||||
func (spa *SinglePageAppHandler) ServeHTTP(writer http.ResponseWriter, request *http.Request) {
|
||||
spa.HttpHandler.ServeHTTP(writer, request)
|
||||
}
|
||||
|
||||
// Thanks to https://github.com/roberthodgen/spa-server
|
||||
// Serve from a public directory with specific index
|
||||
type spaHandler struct {
|
||||
content string // The directory from which to serve
|
||||
contextRoot string // The context root to remove
|
||||
indexFile string // The fallback/default file to serve
|
||||
}
|
||||
|
||||
// Falls back to a supplied index (indexFile) when either condition is true:
|
||||
// (1) Request (file) path is not found
|
||||
// (2) Request path is a directory
|
||||
// Otherwise serves the requested file.
|
||||
func (h *spaHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||
r.URL.Path = strings.TrimPrefix(r.URL.Path, h.contextRoot)
|
||||
p := filepath.Join(h.content, filepath.Clean(r.URL.Path))
|
||||
|
||||
if info, err := os.Stat(p); err != nil {
|
||||
http.ServeFile(w, r, filepath.Join(h.content, h.indexFile))
|
||||
return
|
||||
} else if info.IsDir() {
|
||||
http.ServeFile(w, r, filepath.Join(h.content, h.indexFile))
|
||||
return
|
||||
}
|
||||
|
||||
http.ServeFile(w, r, p)
|
||||
}
|
||||
|
||||
// SpaHandler returns a request handler (http.Handler) that serves a single
|
||||
// page application from a given public directory (location).
|
||||
func SpaHandler(location string, contextRoot string, indexFile string) http.Handler {
|
||||
return &spaHandler{location, contextRoot, indexFile}
|
||||
}
|
||||
@@ -53,17 +53,26 @@ func MapCircuitToRestModel(n *network.Network, _ api.RequestContext, circuit *ne
|
||||
path.Links = append(path.Links, ToEntityRef(link.Id, link, LinkLinkFactory))
|
||||
}
|
||||
|
||||
svc, err := n.Services.Read(circuit.ServiceId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
var svcEntityRef *rest_model.EntityRef
|
||||
if svc, _ := n.Services.Read(circuit.ServiceId); svc != nil {
|
||||
svcEntityRef = ToEntityRef(svc.Name, svc, ServiceLinkFactory)
|
||||
} else {
|
||||
svcEntityRef = ToEntityRef("<deleted>", deletedEntity(circuit.ServiceId), ServiceLinkFactory)
|
||||
}
|
||||
|
||||
ret := &rest_model.CircuitDetail{
|
||||
BaseEntity: BaseEntityToRestModel(circuit, CircuitLinkFactory),
|
||||
ClientID: circuit.ClientId,
|
||||
Path: path,
|
||||
Service: ToEntityRef(svc.Name, svc, ServiceLinkFactory),
|
||||
Service: svcEntityRef,
|
||||
Terminator: ToEntityRef(circuit.Terminator.GetId(), circuit.Terminator, TerminatorLinkFactory),
|
||||
}
|
||||
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
type deletedEntity string
|
||||
|
||||
func (self deletedEntity) GetId() string {
|
||||
return string(self)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
Copyright NetFoundry Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
https://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package change
|
||||
|
||||
import "github.com/openziti/channel/v2"
|
||||
|
||||
func NewControlChannelChange(routerId, routerName, method string, ch channel.Channel) *Context {
|
||||
return New().
|
||||
SetChangeAuthorId(routerId).
|
||||
SetChangeAuthorName(routerName).
|
||||
SetChangeAuthorType(AuthorTypeRouter).
|
||||
SetSourceType(SourceTypeControlChannel).
|
||||
SetSourceMethod(method).
|
||||
SetSourceLocal(ch.Underlay().GetLocalAddr().String()).
|
||||
SetSourceRemote(ch.Underlay().GetRemoteAddr().String())
|
||||
}
|
||||
@@ -51,6 +51,7 @@ type Dispatcher interface {
|
||||
Dispatch(command Command) error
|
||||
IsLeaderOrLeaderless() bool
|
||||
GetPeers() map[string]channel.Channel
|
||||
GetRateLimiter() RateLimiter
|
||||
}
|
||||
|
||||
// LocalDispatcher should be used when running a non-clustered system
|
||||
@@ -67,6 +68,10 @@ func (self *LocalDispatcher) GetPeers() map[string]channel.Channel {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (self *LocalDispatcher) GetRateLimiter() RateLimiter {
|
||||
return self.Limiter
|
||||
}
|
||||
|
||||
func (self *LocalDispatcher) Dispatch(command Command) error {
|
||||
defer func() {
|
||||
if p := recover(); p != nil {
|
||||
|
||||
@@ -18,10 +18,13 @@ package command
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/google/uuid"
|
||||
"github.com/michaelquigley/pfxlog"
|
||||
"github.com/openziti/foundation/v2/errorz"
|
||||
"github.com/openziti/metrics"
|
||||
"github.com/openziti/ziti/controller/apierror"
|
||||
"github.com/pkg/errors"
|
||||
"strings"
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
@@ -33,6 +36,11 @@ const (
|
||||
|
||||
DefaultLimiterSize = 100
|
||||
MinLimiterSize = 10
|
||||
|
||||
DefaultAdaptiveRateLimiterEnabled = true
|
||||
DefaultAdaptiveRateLimiterMinWindowSize = 5
|
||||
DefaultAdaptiveRateLimiterMaxWindowSize = 250
|
||||
DefaultAdaptiveRateLimiterTimeout = 30 * time.Second
|
||||
)
|
||||
|
||||
type RateLimiterConfig struct {
|
||||
@@ -53,6 +61,7 @@ func NewRateLimiter(config RateLimiterConfig, registry metrics.Registry, closeNo
|
||||
queue: make(chan *rateLimitedWork, config.QueueSize),
|
||||
closeNotify: closeNotify,
|
||||
workRate: registry.Timer(MetricCommandLimiterWorkTimer),
|
||||
config: config,
|
||||
}
|
||||
|
||||
if existing := registry.GetGauge(MetricCommandLimiterCurrentQueuedCount); existing != nil {
|
||||
@@ -73,6 +82,7 @@ func NewRateLimiter(config RateLimiterConfig, registry metrics.Registry, closeNo
|
||||
// an ApiError indicating that the server is too busy
|
||||
type RateLimiter interface {
|
||||
RunRateLimited(func() error) error
|
||||
GetQueueFillPct() float64
|
||||
}
|
||||
|
||||
// An AdaptiveRateLimiter allows running arbitrary, sequential operations with a limiter, so that only N operations
|
||||
@@ -96,18 +106,46 @@ type AdaptiveRateLimiter interface {
|
||||
RunRateLimited(f func() error) (RateLimitControl, error)
|
||||
}
|
||||
|
||||
// An AdaptiveRateLimitTracker works similarly to an AdaptiveRateLimiter, except it just manages the rate
|
||||
// limiting without actually running the work. Because it doesn't run the work itself, it has to account
|
||||
// for the possibility that some work may never report as complete or failed. It thus has a configurable
|
||||
// timeout at which point outstanding work will be marked as failed.
|
||||
type AdaptiveRateLimitTracker interface {
|
||||
RunRateLimited(label string) (RateLimitControl, error)
|
||||
RunRateLimitedF(label string, f func(control RateLimitControl) error) error
|
||||
IsRateLimited() bool
|
||||
}
|
||||
|
||||
type NoOpRateLimiter struct{}
|
||||
|
||||
func (self NoOpRateLimiter) RunRateLimited(f func() error) error {
|
||||
return f()
|
||||
}
|
||||
|
||||
func (self NoOpRateLimiter) GetQueueFillPct() float64 {
|
||||
return 0
|
||||
}
|
||||
|
||||
type NoOpAdaptiveRateLimiter struct{}
|
||||
|
||||
func (self NoOpAdaptiveRateLimiter) RunRateLimited(f func() error) (RateLimitControl, error) {
|
||||
return noOpRateLimitControl{}, f()
|
||||
}
|
||||
|
||||
type NoOpAdaptiveRateLimitTracker struct{}
|
||||
|
||||
func (n NoOpAdaptiveRateLimitTracker) RunRateLimited(string) (RateLimitControl, error) {
|
||||
return noOpRateLimitControl{}, nil
|
||||
}
|
||||
|
||||
func (n NoOpAdaptiveRateLimitTracker) RunRateLimitedF(_ string, f func(control RateLimitControl) error) error {
|
||||
return f(noOpRateLimitControl{})
|
||||
}
|
||||
|
||||
func (n NoOpAdaptiveRateLimitTracker) IsRateLimited() bool {
|
||||
return false
|
||||
}
|
||||
|
||||
type rateLimitedWork struct {
|
||||
wrapped func() error
|
||||
result chan error
|
||||
@@ -118,6 +156,7 @@ type DefaultRateLimiter struct {
|
||||
queue chan *rateLimitedWork
|
||||
closeNotify <-chan struct{}
|
||||
workRate metrics.Timer
|
||||
config RateLimiterConfig
|
||||
}
|
||||
|
||||
func (self *DefaultRateLimiter) RunRateLimited(f func() error) error {
|
||||
@@ -141,6 +180,10 @@ func (self *DefaultRateLimiter) RunRateLimited(f func() error) error {
|
||||
}
|
||||
}
|
||||
|
||||
func (self *DefaultRateLimiter) GetQueueFillPct() float64 {
|
||||
return float64(self.currentSize.Load()) / float64(self.config.QueueSize)
|
||||
}
|
||||
|
||||
func (self *DefaultRateLimiter) run() {
|
||||
defer self.workRate.Dispose()
|
||||
|
||||
@@ -180,19 +223,58 @@ type AdaptiveRateLimiterConfig struct {
|
||||
|
||||
// WindowSizeMetric - the name of the metric show the current window size
|
||||
WindowSizeMetric string
|
||||
|
||||
// Timeout - only used for AdaptiveRateLimitTracker, sets when a piece of outstanding work will be assumed to
|
||||
// have failed if it hasn't been marked completed yet, so that work slots aren't lost
|
||||
Timeout time.Duration
|
||||
}
|
||||
|
||||
func (self *AdaptiveRateLimiterConfig) Validate() error {
|
||||
if !self.Enabled {
|
||||
return nil
|
||||
func (self *AdaptiveRateLimiterConfig) SetDefaults() {
|
||||
self.Enabled = DefaultAdaptiveRateLimiterEnabled
|
||||
self.MinSize = DefaultAdaptiveRateLimiterMinWindowSize
|
||||
self.MaxSize = DefaultAdaptiveRateLimiterMaxWindowSize
|
||||
self.Timeout = DefaultAdaptiveRateLimiterTimeout
|
||||
}
|
||||
|
||||
func LoadAdaptiveRateLimiterConfig(cfg *AdaptiveRateLimiterConfig, cfgmap map[interface{}]interface{}) error {
|
||||
if value, found := cfgmap["enabled"]; found {
|
||||
cfg.Enabled = strings.EqualFold("true", fmt.Sprintf("%v", value))
|
||||
}
|
||||
|
||||
if self.MinSize < 1 {
|
||||
return errors.New("adaptive rate limiter min size is 1")
|
||||
if value, found := cfgmap["maxSize"]; found {
|
||||
if intVal, ok := value.(int); ok {
|
||||
v := int64(intVal)
|
||||
cfg.MaxSize = uint32(v)
|
||||
} else {
|
||||
return errors.Errorf("invalid value %d for adaptive rate limiter max size, must be integer value", value)
|
||||
}
|
||||
}
|
||||
if self.MinSize > self.MaxSize {
|
||||
return fmt.Errorf("adaptive rate limiter min size must be <- max size. min: %v, max: %v", self.MinSize, self.MaxSize)
|
||||
|
||||
if value, found := cfgmap["minSize"]; found {
|
||||
if intVal, ok := value.(int); ok {
|
||||
v := int64(intVal)
|
||||
cfg.MinSize = uint32(v)
|
||||
} else {
|
||||
return errors.Errorf("invalid value %d for adaptive rate limiter min size, must be integer value", value)
|
||||
}
|
||||
}
|
||||
|
||||
if cfg.MinSize < 1 {
|
||||
return errors.Errorf("invalid value %d for adaptive rate limiter min size, must be at least", cfg.MinSize)
|
||||
}
|
||||
|
||||
if cfg.MinSize > cfg.MaxSize {
|
||||
return errors.Errorf("invalid values, %d, %d for adaptive rate limiter min size and max size, min must be <= max",
|
||||
cfg.MinSize, cfg.MaxSize)
|
||||
}
|
||||
|
||||
if value, found := cfgmap["timeout"]; found {
|
||||
var err error
|
||||
if cfg.Timeout, err = time.ParseDuration(fmt.Sprintf("%v", value)); err != nil {
|
||||
return fmt.Errorf("invalid value %v for adaptive rate limiter timeout (%w)", value, err)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -202,12 +284,11 @@ func NewAdaptiveRateLimiter(config AdaptiveRateLimiterConfig, registry metrics.R
|
||||
}
|
||||
|
||||
result := &adaptiveRateLimiter{
|
||||
currentWindow: atomic.Int32{},
|
||||
minWindow: int32(config.MinSize),
|
||||
maxWindow: int32(config.MaxSize),
|
||||
queue: make(chan *adaptiveRateLimitedWork, config.MaxSize),
|
||||
closeNotify: closeNotify,
|
||||
workRate: registry.Timer(config.WorkTimerMetric),
|
||||
minWindow: int32(config.MinSize),
|
||||
maxWindow: int32(config.MaxSize),
|
||||
queue: make(chan *adaptiveRateLimitedWork, config.MaxSize),
|
||||
closeNotify: closeNotify,
|
||||
workRate: registry.Timer(config.WorkTimerMetric),
|
||||
}
|
||||
|
||||
if existing := registry.GetGauge(config.QueueSizeMetric); existing != nil {
|
||||
@@ -267,7 +348,7 @@ func (self *adaptiveRateLimiter) success() {
|
||||
}
|
||||
}
|
||||
|
||||
func (self *adaptiveRateLimiter) failure(queuePosition int32) {
|
||||
func (self *adaptiveRateLimiter) backoff(queuePosition int32) {
|
||||
if self.currentWindow.Load() <= self.minWindow {
|
||||
return
|
||||
}
|
||||
@@ -351,8 +432,14 @@ func (self *adaptiveRateLimiter) run() {
|
||||
}
|
||||
|
||||
type RateLimitControl interface {
|
||||
// Success indicates the operation was a success
|
||||
Success()
|
||||
Timeout()
|
||||
|
||||
// Backoff indicates that we need to backoff
|
||||
Backoff()
|
||||
|
||||
// Failed indicates the operation was not a success, but a backoff isn't required
|
||||
Failed()
|
||||
}
|
||||
|
||||
type rateLimitControl struct {
|
||||
@@ -364,15 +451,25 @@ func (r rateLimitControl) Success() {
|
||||
r.limiter.success()
|
||||
}
|
||||
|
||||
func (r rateLimitControl) Timeout() {
|
||||
r.limiter.failure(r.queuePosition)
|
||||
func (r rateLimitControl) Backoff() {
|
||||
r.limiter.backoff(r.queuePosition)
|
||||
}
|
||||
|
||||
func (r rateLimitControl) Failed() {
|
||||
// no-op for this type
|
||||
}
|
||||
|
||||
func NoOpRateLimitControl() RateLimitControl {
|
||||
return noOpRateLimitControl{}
|
||||
}
|
||||
|
||||
type noOpRateLimitControl struct{}
|
||||
|
||||
func (noOpRateLimitControl) Success() {}
|
||||
|
||||
func (noOpRateLimitControl) Timeout() {}
|
||||
func (noOpRateLimitControl) Backoff() {}
|
||||
|
||||
func (noOpRateLimitControl) Failed() {}
|
||||
|
||||
func WasRateLimited(err error) bool {
|
||||
var apiErr *errorz.ApiError
|
||||
@@ -381,3 +478,207 @@ func WasRateLimited(err error) bool {
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func NewAdaptiveRateLimitTracker(config AdaptiveRateLimiterConfig, registry metrics.Registry, closeNotify <-chan struct{}) AdaptiveRateLimitTracker {
|
||||
if !config.Enabled {
|
||||
return NoOpAdaptiveRateLimitTracker{}
|
||||
}
|
||||
|
||||
result := &adaptiveRateLimitTracker{
|
||||
minWindow: int32(config.MinSize),
|
||||
maxWindow: int32(config.MaxSize),
|
||||
timeout: config.Timeout,
|
||||
workRate: registry.Timer(config.WorkTimerMetric),
|
||||
outstandingWork: map[string]*adaptiveRateLimitTrackerWork{},
|
||||
closeNotify: closeNotify,
|
||||
}
|
||||
|
||||
if existing := registry.GetGauge(config.QueueSizeMetric); existing != nil {
|
||||
existing.Dispose()
|
||||
}
|
||||
|
||||
registry.FuncGauge(config.QueueSizeMetric, func() int64 {
|
||||
return int64(result.currentSize.Load())
|
||||
})
|
||||
|
||||
if existing := registry.GetGauge(config.WindowSizeMetric); existing != nil {
|
||||
existing.Dispose()
|
||||
}
|
||||
|
||||
registry.FuncGauge(config.WindowSizeMetric, func() int64 {
|
||||
return int64(result.currentWindow.Load())
|
||||
})
|
||||
|
||||
result.currentWindow.Store(int32(config.MaxSize))
|
||||
|
||||
go result.run()
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
type adaptiveRateLimitTracker struct {
|
||||
currentWindow atomic.Int32
|
||||
minWindow int32
|
||||
maxWindow int32
|
||||
timeout time.Duration
|
||||
lock sync.Mutex
|
||||
successCounter atomic.Uint32
|
||||
|
||||
currentSize atomic.Int32
|
||||
workRate metrics.Timer
|
||||
outstandingWork map[string]*adaptiveRateLimitTrackerWork
|
||||
closeNotify <-chan struct{}
|
||||
}
|
||||
|
||||
func (self *adaptiveRateLimitTracker) IsRateLimited() bool {
|
||||
return self.currentSize.Load() >= self.currentWindow.Load()
|
||||
}
|
||||
|
||||
func (self *adaptiveRateLimitTracker) success(work *adaptiveRateLimitTrackerWork) {
|
||||
self.lock.Lock()
|
||||
defer self.lock.Unlock()
|
||||
|
||||
self.currentSize.Add(-1)
|
||||
delete(self.outstandingWork, work.id)
|
||||
self.workRate.UpdateSince(work.createTime)
|
||||
if self.currentWindow.Load() >= self.maxWindow {
|
||||
return
|
||||
}
|
||||
|
||||
if self.successCounter.Add(1)%10 == 0 {
|
||||
if nextVal := self.currentWindow.Add(1); nextVal > self.maxWindow {
|
||||
self.currentWindow.Store(self.maxWindow)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (self *adaptiveRateLimitTracker) backoff(work *adaptiveRateLimitTrackerWork) {
|
||||
self.lock.Lock()
|
||||
defer self.lock.Unlock()
|
||||
|
||||
self.currentSize.Add(-1)
|
||||
delete(self.outstandingWork, work.id)
|
||||
|
||||
if self.currentWindow.Load() <= self.minWindow {
|
||||
return
|
||||
}
|
||||
|
||||
current := self.currentWindow.Load()
|
||||
nextWindow := work.queuePosition - 10
|
||||
if nextWindow < current {
|
||||
if nextWindow < self.minWindow {
|
||||
nextWindow = self.minWindow
|
||||
}
|
||||
self.currentWindow.Store(nextWindow)
|
||||
}
|
||||
}
|
||||
|
||||
func (self *adaptiveRateLimitTracker) complete(work *adaptiveRateLimitTrackerWork) {
|
||||
self.lock.Lock()
|
||||
defer self.lock.Unlock()
|
||||
self.currentSize.Add(-1)
|
||||
delete(self.outstandingWork, work.id)
|
||||
}
|
||||
|
||||
func (self *adaptiveRateLimitTracker) RunRateLimited(label string) (RateLimitControl, error) {
|
||||
self.lock.Lock()
|
||||
defer self.lock.Unlock()
|
||||
queuePosition := self.currentSize.Add(1)
|
||||
if queuePosition > self.currentWindow.Load() {
|
||||
self.currentSize.Add(-1)
|
||||
return noOpRateLimitControl{}, apierror.NewTooManyUpdatesError()
|
||||
}
|
||||
|
||||
work := &adaptiveRateLimitTrackerWork{
|
||||
id: uuid.NewString(),
|
||||
limiter: self,
|
||||
queuePosition: queuePosition,
|
||||
createTime: time.Now(),
|
||||
label: label,
|
||||
}
|
||||
|
||||
self.outstandingWork[work.id] = work
|
||||
|
||||
return work, nil
|
||||
}
|
||||
|
||||
func (self *adaptiveRateLimitTracker) RunRateLimitedF(label string, f func(control RateLimitControl) error) error {
|
||||
ctrl, err := self.RunRateLimited(label)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return f(ctrl)
|
||||
}
|
||||
|
||||
func (self *adaptiveRateLimitTracker) run() {
|
||||
defer self.workRate.Dispose()
|
||||
|
||||
ticker := time.NewTicker(30 * time.Second)
|
||||
defer ticker.Stop()
|
||||
|
||||
for {
|
||||
select {
|
||||
case <-ticker.C:
|
||||
self.cleanExpired()
|
||||
case <-self.closeNotify:
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (self *adaptiveRateLimitTracker) cleanExpired() {
|
||||
self.lock.Lock()
|
||||
|
||||
var toRemove []*adaptiveRateLimitTrackerWork
|
||||
|
||||
for _, v := range self.outstandingWork {
|
||||
if time.Since(v.createTime) > self.timeout {
|
||||
toRemove = append(toRemove, v)
|
||||
}
|
||||
}
|
||||
|
||||
self.lock.Unlock()
|
||||
|
||||
for _, work := range toRemove {
|
||||
pfxlog.Logger().WithField("label", work.label).
|
||||
WithField("duration", time.Since(work.createTime)).
|
||||
Error("rate limit work expired")
|
||||
work.Backoff()
|
||||
}
|
||||
}
|
||||
|
||||
type adaptiveRateLimitTrackerWork struct {
|
||||
id string
|
||||
limiter *adaptiveRateLimitTracker
|
||||
queuePosition int32
|
||||
createTime time.Time
|
||||
completed atomic.Bool
|
||||
label string
|
||||
}
|
||||
|
||||
func (self *adaptiveRateLimitTrackerWork) Success() {
|
||||
if self.completed.CompareAndSwap(false, true) {
|
||||
pfxlog.Logger().WithField("label", self.label).
|
||||
WithField("duration", time.Since(self.createTime)).
|
||||
Info("success")
|
||||
self.limiter.success(self)
|
||||
}
|
||||
}
|
||||
|
||||
func (self *adaptiveRateLimitTrackerWork) Backoff() {
|
||||
if self.completed.CompareAndSwap(false, true) {
|
||||
pfxlog.Logger().WithField("label", self.label).
|
||||
WithField("duration", time.Since(self.createTime)).
|
||||
Info("backoff")
|
||||
self.limiter.backoff(self)
|
||||
}
|
||||
}
|
||||
|
||||
func (self *adaptiveRateLimitTrackerWork) Failed() {
|
||||
if self.completed.CompareAndSwap(false, true) {
|
||||
pfxlog.Logger().WithField("label", self.label).
|
||||
WithField("duration", time.Since(self.createTime)).
|
||||
Info("failed")
|
||||
self.limiter.complete(self)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,6 +21,7 @@ package command
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/openziti/foundation/v2/concurrenz"
|
||||
"github.com/openziti/foundation/v2/errorz"
|
||||
"github.com/openziti/metrics"
|
||||
"github.com/openziti/sdk-golang/ziti"
|
||||
@@ -88,7 +89,7 @@ func Test_AdaptiveRateLimiter(t *testing.T) {
|
||||
elapsed := time.Since(start)
|
||||
if elapsed > time.Second*5 {
|
||||
timedOut.Add(1)
|
||||
ctrl.Timeout()
|
||||
ctrl.Backoff()
|
||||
} else {
|
||||
count++
|
||||
completed.Add(1)
|
||||
@@ -111,6 +112,90 @@ func Test_AdaptiveRateLimiter(t *testing.T) {
|
||||
logStats()
|
||||
}
|
||||
|
||||
func Test_AdaptiveRateLimiterTracker(t *testing.T) {
|
||||
cfg := AdaptiveRateLimiterConfig{
|
||||
Enabled: true,
|
||||
MaxSize: 250,
|
||||
MinSize: 5,
|
||||
WorkTimerMetric: "workTime",
|
||||
QueueSizeMetric: "queueSize",
|
||||
WindowSizeMetric: "windowSize",
|
||||
Timeout: time.Second,
|
||||
}
|
||||
|
||||
registry := metrics.NewRegistry("test", nil)
|
||||
closeNotify := make(chan struct{})
|
||||
limiter := NewAdaptiveRateLimitTracker(cfg, registry, closeNotify).(*adaptiveRateLimitTracker)
|
||||
|
||||
var queueFull atomic.Uint32
|
||||
var timedOut atomic.Uint32
|
||||
var completed atomic.Uint32
|
||||
|
||||
countdown := &sync.WaitGroup{}
|
||||
|
||||
logStats := func() {
|
||||
fmt.Printf("queueFulls: %v\n", queueFull.Load())
|
||||
fmt.Printf("timedOut: %v\n", timedOut.Load())
|
||||
fmt.Printf("completed: %v\n", completed.Load())
|
||||
fmt.Printf("queueSize: %v\n", limiter.currentSize.Load())
|
||||
fmt.Printf("windowSize: %v\n", limiter.currentWindow.Load())
|
||||
}
|
||||
|
||||
go func() {
|
||||
for {
|
||||
select {
|
||||
case <-closeNotify:
|
||||
return
|
||||
case <-time.After(time.Second):
|
||||
logStats()
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
sem := concurrenz.NewSemaphore(25)
|
||||
|
||||
for i := 0; i < 300; i++ {
|
||||
countdown.Add(1)
|
||||
|
||||
go func() {
|
||||
defer countdown.Done()
|
||||
count := 0
|
||||
for count < 1000 {
|
||||
// start := time.Now()
|
||||
err := limiter.RunRateLimitedF("", func(control RateLimitControl) error {
|
||||
if sem.TryAcquire() {
|
||||
time.Sleep(25 * time.Millisecond)
|
||||
control.Success()
|
||||
sem.Release()
|
||||
completed.Add(1)
|
||||
} else {
|
||||
time.Sleep(5 * time.Millisecond)
|
||||
control.Backoff()
|
||||
timedOut.Add(1)
|
||||
}
|
||||
return nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
apiError := &errorz.ApiError{}
|
||||
if errors.As(err, &apiError) && apiError.Code == apierror.ServerTooManyRequestsCode {
|
||||
queueFull.Add(1)
|
||||
time.Sleep(time.Millisecond)
|
||||
} else {
|
||||
panic(err)
|
||||
}
|
||||
} else {
|
||||
count++
|
||||
}
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
countdown.Wait()
|
||||
close(closeNotify)
|
||||
logStats()
|
||||
}
|
||||
|
||||
func Test_AuthFlood(t *testing.T) {
|
||||
countdown := &sync.WaitGroup{}
|
||||
|
||||
|
||||
+23
-36
@@ -401,53 +401,40 @@ func (c *Config) loadEnrollmentSection(edgeConfigMap map[interface{}]interface{}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *Config) loadAuthRateLimiter(cfgmap map[interface{}]interface{}) error {
|
||||
func (c *Config) loadAuthRateLimiterConfig(cfgmap map[interface{}]interface{}) error {
|
||||
c.AuthRateLimiter.SetDefaults()
|
||||
|
||||
c.AuthRateLimiter.Enabled = DefaultAuthRateLimiterEnabled
|
||||
c.AuthRateLimiter.MaxSize = DefaultAuthRateLimiterMaxSize
|
||||
c.AuthRateLimiter.MinSize = DefaultAuthRateLimiterMinSize
|
||||
|
||||
if value, found := cfgmap["authRateLimiter"]; found {
|
||||
if submap, ok := value.(map[interface{}]interface{}); ok {
|
||||
if value, found := submap["enabled"]; found {
|
||||
c.AuthRateLimiter.Enabled = strings.EqualFold("true", fmt.Sprintf("%v", value))
|
||||
if err := command.LoadAdaptiveRateLimiterConfig(&c.AuthRateLimiter, submap); err != nil {
|
||||
return err
|
||||
}
|
||||
if c.AuthRateLimiter.MaxSize < AuthRateLimiterMinSizeValue {
|
||||
return errors.Errorf("invalid value %v for authRateLimiter.maxSize, must be at least %v",
|
||||
c.AuthRateLimiter.MaxSize, AuthRateLimiterMinSizeValue)
|
||||
}
|
||||
if c.AuthRateLimiter.MaxSize > AuthRateLimiterMaxSizeValue {
|
||||
return errors.Errorf("invalid value %v for authRateLimiter.maxSize, must be at most %v",
|
||||
c.AuthRateLimiter.MaxSize, AuthRateLimiterMaxSizeValue)
|
||||
}
|
||||
|
||||
if value, found := submap["maxSize"]; found {
|
||||
if intVal, ok := value.(int); ok {
|
||||
v := int64(intVal)
|
||||
if v < AuthRateLimiterMinSizeValue {
|
||||
return errors.Errorf("invalid value %v for authRateLimiter.maxSize, must be at least %v", value, AuthRateLimiterMinSizeValue)
|
||||
}
|
||||
if v > AuthRateLimiterMaxSizeValue {
|
||||
return errors.Errorf("invalid value %v for authRateLimiter.maxSize, must be at most %v", value, AuthRateLimiterMaxSizeValue)
|
||||
}
|
||||
c.AuthRateLimiter.MaxSize = uint32(v)
|
||||
} else {
|
||||
return errors.Errorf("invalid value %v for authRateLimiter.maxSize, must be integer value", value)
|
||||
}
|
||||
if c.AuthRateLimiter.MinSize < AuthRateLimiterMinSizeValue {
|
||||
return errors.Errorf("invalid value %v for authRateLimiter.minSize, must be at least %v",
|
||||
c.AuthRateLimiter.MinSize, AuthRateLimiterMinSizeValue)
|
||||
}
|
||||
|
||||
if value, found := submap["minSize"]; found {
|
||||
if intVal, ok := value.(int); ok {
|
||||
v := int64(intVal)
|
||||
if v < AuthRateLimiterMinSizeValue {
|
||||
return errors.Errorf("invalid value %v for authRateLimiter.minSize, must be at least %v", value, AuthRateLimiterMinSizeValue)
|
||||
}
|
||||
if v > AuthRateLimiterMaxSizeValue {
|
||||
return errors.Errorf("invalid value %v for authRateLimiter.minSize, must be at most %v", value, AuthRateLimiterMaxSizeValue)
|
||||
}
|
||||
c.AuthRateLimiter.MinSize = uint32(v)
|
||||
} else {
|
||||
return errors.Errorf("invalid value %v for authRateLimiter.minSize, must be integer value", value)
|
||||
}
|
||||
}
|
||||
|
||||
if c.AuthRateLimiter.MinSize > c.AuthRateLimiter.MaxSize {
|
||||
return errors.Errorf("invalid values, %v, %v for authRateLimiter minSize and maxSize, min must be <= max",
|
||||
c.AuthRateLimiter.MinSize, c.AuthRateLimiter.MaxSize)
|
||||
if c.AuthRateLimiter.MinSize > AuthRateLimiterMaxSizeValue {
|
||||
return errors.Errorf("invalid value %v for authRateLimiter.minSize, must be at most %v",
|
||||
c.AuthRateLimiter.MinSize, AuthRateLimiterMaxSizeValue)
|
||||
}
|
||||
} else {
|
||||
return errors.Errorf("invalid type for authRateLimiter, should be map instead of %T", value)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -484,7 +471,7 @@ func LoadFromMap(configMap map[interface{}]interface{}) (*Config, error) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if err = edgeConfig.loadAuthRateLimiter(edgeConfigMap); err != nil {
|
||||
if err = edgeConfig.loadAuthRateLimiterConfig(edgeConfigMap); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
|
||||
@@ -28,6 +28,7 @@ import (
|
||||
"github.com/openziti/ziti/controller/event"
|
||||
"github.com/openziti/ziti/controller/events"
|
||||
"github.com/openziti/ziti/controller/handler_peer_ctrl"
|
||||
"github.com/openziti/ziti/controller/zac"
|
||||
"math/big"
|
||||
"os"
|
||||
"sync/atomic"
|
||||
@@ -247,6 +248,10 @@ func (c *Controller) initWeb() {
|
||||
logrus.WithError(err).Fatalf("failed to create metrics api factory")
|
||||
}
|
||||
|
||||
if err := c.xweb.GetRegistry().Add(zac.NewZitiAdminConsoleFactory()); err != nil {
|
||||
logrus.WithError(err).Fatalf("failed to create single page application factory")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func (c *Controller) Run() error {
|
||||
|
||||
@@ -23,6 +23,8 @@ import (
|
||||
"github.com/openziti/storage/boltz"
|
||||
"github.com/openziti/ziti/common/eid"
|
||||
"github.com/openziti/ziti/controller/change"
|
||||
"github.com/pkg/errors"
|
||||
log "github.com/sirupsen/logrus"
|
||||
"go.etcd.io/bbolt"
|
||||
"strings"
|
||||
"time"
|
||||
@@ -149,44 +151,43 @@ func (store *apiSessionStoreImpl) onEventualDelete(db boltz.Db, name string, api
|
||||
}).Error("error querying for session associated to an api session during onEventualDelete")
|
||||
}
|
||||
|
||||
for _, id := range idCollector.ids {
|
||||
changeContext := change.New().SetSourceType("events.emitter").SetChangeAuthorType(change.AuthorTypeController)
|
||||
err = db.Update(changeContext.NewMutateContext(), func(ctx boltz.MutateContext) error {
|
||||
if err := store.stores.session.DeleteById(ctx, id); err != nil {
|
||||
if boltz.IsErrNotFoundErr(err) {
|
||||
return nil
|
||||
}
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
pfxlog.Logger().WithError(err).WithFields(map[string]interface{}{
|
||||
"eventName": name,
|
||||
"apiSessionId": string(apiSessionId),
|
||||
"sessionId": id,
|
||||
}).Error("error deleting for session associated to an api session during onEventualDelete")
|
||||
}
|
||||
if store.stores.rateLimiter.GetQueueFillPct() > 0.5 {
|
||||
time.Sleep(time.Second)
|
||||
}
|
||||
|
||||
store.cleanupSessions(db, name, apiSessionId, idCollector.ids)
|
||||
}
|
||||
|
||||
func (store *apiSessionStoreImpl) cleanupSessions(db boltz.Db, name string, apiSessionId []byte, sessionIds []string) {
|
||||
logger := pfxlog.Logger().WithField("eventName", name).
|
||||
WithField("apiSessionId", string(apiSessionId))
|
||||
|
||||
changeContext := change.New().SetSourceType("events.emitter").SetChangeAuthorType(change.AuthorTypeController)
|
||||
err = db.Update(changeContext.NewMutateContext(), func(ctx boltz.MutateContext) error {
|
||||
err := db.Update(changeContext.NewMutateContext(), func(ctx boltz.MutateContext) error {
|
||||
indexPath := []string{RootBucket, boltz.IndexesBucket, EntityTypeApiSessions, EntityTypeSessions}
|
||||
if bucket := boltz.Path(ctx.Tx(), indexPath...); bucket != nil {
|
||||
if err := bucket.DeleteBucket(apiSessionId); err != nil {
|
||||
if err != bbolt.ErrBucketNotFound {
|
||||
return err
|
||||
if !errors.Is(err, bbolt.ErrBucketNotFound) {
|
||||
logger.WithError(err).
|
||||
Error("error deleting for api session index associated to an api session during onEventualDelete")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for _, id := range sessionIds {
|
||||
if err := store.stores.session.DeleteById(ctx, id); err != nil {
|
||||
if !boltz.IsErrNotFoundErr(err) {
|
||||
logger.WithError(err).WithField("sessionId", id).
|
||||
Error("error deleting for session associated to an api session during onEventualDelete")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
pfxlog.Logger().WithError(err).WithFields(map[string]interface{}{
|
||||
"eventName": name,
|
||||
"apiSessionId": string(apiSessionId),
|
||||
}).Error("error deleting for api session index associated to an api session during onEventualDelete")
|
||||
log.WithError(err).Error("error while cleanup after api-session delete")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -41,6 +41,8 @@ const (
|
||||
FieldIdentityEnvInfoOs = "envInfoOs"
|
||||
FieldIdentityEnvInfoOsRelease = "envInfoRelease"
|
||||
FieldIdentityEnvInfoOsVersion = "envInfoVersion"
|
||||
FieldIdentityEnvInfoDomain = "envInfoDomain"
|
||||
FieldIdentityEnvInfoHostname = "envInfoHostname"
|
||||
FieldIdentitySdkInfoBranch = "sdkInfoBranch"
|
||||
FieldIdentitySdkInfoRevision = "sdkInfoRevision"
|
||||
FieldIdentitySdkInfoType = "sdkInfoType"
|
||||
@@ -75,6 +77,8 @@ type EnvInfo struct {
|
||||
Os string `json:"os"`
|
||||
OsRelease string `json:"osRelease"`
|
||||
OsVersion string `json:"osVersion"`
|
||||
Domain string `json:"domain"`
|
||||
Hostname string `json:"hostname"`
|
||||
}
|
||||
|
||||
type SdkInfo struct {
|
||||
@@ -256,6 +260,8 @@ func (store *identityStoreImpl) FillEntity(entity *Identity, bucket *boltz.Typed
|
||||
Os: bucket.GetStringWithDefault(FieldIdentityEnvInfoOs, ""),
|
||||
OsRelease: bucket.GetStringWithDefault(FieldIdentityEnvInfoOsRelease, ""),
|
||||
OsVersion: bucket.GetStringWithDefault(FieldIdentityEnvInfoOsVersion, ""),
|
||||
Domain: bucket.GetStringWithDefault(FieldIdentityEnvInfoDomain, ""),
|
||||
Hostname: bucket.GetStringWithDefault(FieldIdentityEnvInfoHostname, ""),
|
||||
}
|
||||
|
||||
entity.ServiceHostingPrecedences = map[string]ziti.Precedence{}
|
||||
@@ -306,6 +312,8 @@ func (store *identityStoreImpl) PersistEntity(entity *Identity, ctx *boltz.Persi
|
||||
ctx.SetString(FieldIdentityEnvInfoOs, entity.EnvInfo.Os)
|
||||
ctx.SetString(FieldIdentityEnvInfoOsRelease, entity.EnvInfo.OsRelease)
|
||||
ctx.SetString(FieldIdentityEnvInfoOsVersion, entity.EnvInfo.OsVersion)
|
||||
ctx.SetString(FieldIdentityEnvInfoDomain, entity.EnvInfo.Domain)
|
||||
ctx.SetString(FieldIdentityEnvInfoHostname, entity.EnvInfo.Hostname)
|
||||
}
|
||||
|
||||
if entity.SdkInfo != nil {
|
||||
|
||||
@@ -24,6 +24,7 @@ import (
|
||||
"github.com/openziti/storage/ast"
|
||||
"github.com/openziti/storage/boltz"
|
||||
"github.com/openziti/ziti/controller/change"
|
||||
"github.com/openziti/ziti/controller/command"
|
||||
"go.etcd.io/bbolt"
|
||||
"go4.org/sort"
|
||||
"reflect"
|
||||
@@ -219,6 +220,8 @@ type stores struct {
|
||||
postureCheckType *postureCheckTypeStoreImpl
|
||||
apiSessionCertificate *ApiSessionCertificateStoreImpl
|
||||
mfa *MfaStoreImpl
|
||||
|
||||
rateLimiter command.RateLimiter
|
||||
}
|
||||
|
||||
type DbProvider interface {
|
||||
@@ -231,13 +234,15 @@ func (f DbProviderF) GetDb() boltz.Db {
|
||||
return f()
|
||||
}
|
||||
|
||||
func InitStores(db boltz.Db) (*Stores, error) {
|
||||
func InitStores(db boltz.Db, rateLimiter command.RateLimiter) (*Stores, error) {
|
||||
dbProvider := DbProviderF(func() boltz.Db {
|
||||
return db
|
||||
})
|
||||
errorHolder := &errorz.ErrorHolderImpl{}
|
||||
|
||||
internalStores := &stores{}
|
||||
internalStores := &stores{
|
||||
rateLimiter: rateLimiter,
|
||||
}
|
||||
|
||||
internalStores.eventualEvent = newEventualEventStore(internalStores)
|
||||
internalStores.EventualEventer = NewEventualEventerBbolt(dbProvider, internalStores.eventualEvent, 2*time.Second, 1000)
|
||||
|
||||
@@ -7,6 +7,7 @@ import (
|
||||
"github.com/openziti/storage/boltztest"
|
||||
"github.com/openziti/ziti/common/eid"
|
||||
"github.com/openziti/ziti/controller/change"
|
||||
"github.com/openziti/ziti/controller/command"
|
||||
"github.com/openziti/ziti/controller/xt"
|
||||
"github.com/openziti/ziti/controller/xt_smartrouting"
|
||||
"github.com/pkg/errors"
|
||||
@@ -40,7 +41,7 @@ func (ctx *TestContext) Init() {
|
||||
ctx.InitDb(Open)
|
||||
|
||||
var err error
|
||||
ctx.stores, err = InitStores(ctx.GetDb())
|
||||
ctx.stores, err = InitStores(ctx.GetDb(), command.NoOpRateLimiter{})
|
||||
ctx.NoError(err)
|
||||
|
||||
ctx.NoError(RunMigrations(ctx.GetDb(), ctx.stores))
|
||||
|
||||
@@ -27,9 +27,10 @@ type ctrlChannelMetricsMapper struct{}
|
||||
|
||||
func (ctrlChannelMetricsMapper) mapMetrics(_ *metrics_pb.MetricsMessage, event *event.MetricsEvent) {
|
||||
if strings.HasPrefix(event.Metric, "ctrl.") {
|
||||
parts := strings.Split(event.Metric, ":")
|
||||
event.Metric = parts[0]
|
||||
event.SourceEntityId = parts[1]
|
||||
if parts := strings.Split(event.Metric, ":"); len(parts) > 1 {
|
||||
event.Metric = parts[0]
|
||||
event.SourceEntityId = parts[1]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -28,12 +28,5 @@ type baseHandler struct {
|
||||
}
|
||||
|
||||
func (self *baseHandler) newChangeContext(ch channel.Channel, method string) *change.Context {
|
||||
return change.New().
|
||||
SetChangeAuthorId(self.router.Id).
|
||||
SetChangeAuthorName(self.router.Name).
|
||||
SetChangeAuthorType(change.AuthorTypeRouter).
|
||||
SetSourceType(change.SourceTypeControlChannel).
|
||||
SetSourceMethod(method).
|
||||
SetSourceLocal(ch.Underlay().GetLocalAddr().String()).
|
||||
SetSourceRemote(ch.Underlay().GetRemoteAddr().String())
|
||||
return change.NewControlChannelChange(self.router.Id, self.router.Name, method, ch)
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
package handler_ctrl
|
||||
|
||||
import (
|
||||
"github.com/openziti/ziti/common/pb/ctrl_pb"
|
||||
"github.com/sirupsen/logrus"
|
||||
"time"
|
||||
|
||||
@@ -72,6 +73,10 @@ func (self *bindHandler) BindChannel(binding channel.Binding) error {
|
||||
binding.AddTypedReceiveHandler(newDequiesceRouterHandler(self.router, self.network))
|
||||
binding.AddTypedReceiveHandler(newDecommissionRouterHandler(self.router, self.network))
|
||||
binding.AddTypedReceiveHandler(newPingHandler())
|
||||
binding.AddTypedReceiveHandler(&channel.AsyncFunctionReceiveAdapter{
|
||||
Type: int32(ctrl_pb.ContentType_ValidateTerminatorsV2ResponseType),
|
||||
Handler: self.network.RouterMessaging.NewValidationResponseHandler(self.network, self.router),
|
||||
})
|
||||
binding.AddPeekHandler(trace.NewChannelPeekHandler(self.network.GetAppId(), binding.GetChannel(), self.network.GetTraceController()))
|
||||
binding.AddPeekHandler(metrics2.NewCtrlChannelPeekHandler(self.router.Id, self.network.GetMetricsRegistry()))
|
||||
|
||||
|
||||
@@ -19,9 +19,10 @@ package handler_ctrl
|
||||
import (
|
||||
"github.com/michaelquigley/pfxlog"
|
||||
"github.com/openziti/channel/v2"
|
||||
"github.com/openziti/ziti/controller/network"
|
||||
"github.com/openziti/ziti/common/handler_common"
|
||||
"github.com/openziti/ziti/common/pb/ctrl_pb"
|
||||
"github.com/openziti/ziti/controller/command"
|
||||
"github.com/openziti/ziti/controller/network"
|
||||
"google.golang.org/protobuf/proto"
|
||||
)
|
||||
|
||||
@@ -63,6 +64,8 @@ func (self *removeTerminatorsHandler) handleRemoveTerminators(msg *channel.Messa
|
||||
WithField("terminatorIds", request.TerminatorIds).
|
||||
Info("removed terminators")
|
||||
handler_common.SendSuccess(msg, ch, "")
|
||||
} else if command.WasRateLimited(err) {
|
||||
handler_common.SendServerBusy(msg, ch, "remove.terminators")
|
||||
} else {
|
||||
handler_common.SendFailure(msg, ch, err.Error())
|
||||
}
|
||||
|
||||
@@ -348,6 +348,8 @@ func (self *baseTunnelRequestContext) updateIdentityInfo(envInfo *edge_ctrl_pb.E
|
||||
Os: envInfo.Os,
|
||||
OsRelease: envInfo.OsRelease,
|
||||
OsVersion: envInfo.OsVersion,
|
||||
Domain: envInfo.Domain,
|
||||
Hostname: envInfo.Hostname,
|
||||
}
|
||||
if !self.identity.EnvInfo.Equals(newEnvInfo) {
|
||||
self.identity.EnvInfo = newEnvInfo
|
||||
|
||||
@@ -34,6 +34,7 @@ import (
|
||||
"github.com/sirupsen/logrus"
|
||||
"google.golang.org/protobuf/proto"
|
||||
"math"
|
||||
"time"
|
||||
)
|
||||
|
||||
type createTerminatorV2Handler struct {
|
||||
@@ -73,6 +74,7 @@ func (self *createTerminatorV2Handler) HandleReceive(msg *channel.Message, ch ch
|
||||
}
|
||||
|
||||
func (self *createTerminatorV2Handler) CreateTerminatorV2(ctx *CreateTerminatorV2RequestContext) {
|
||||
start := time.Now()
|
||||
logger := pfxlog.ContextLogger(self.ch.Label()).
|
||||
WithField("routerId", self.ch.Id()).
|
||||
WithField("token", ctx.req.SessionToken).
|
||||
@@ -89,7 +91,11 @@ func (self *createTerminatorV2Handler) CreateTerminatorV2(ctx *CreateTerminatorV
|
||||
ctx.loadService()
|
||||
|
||||
if ctx.err != nil {
|
||||
self.returnError(ctx, edge_ctrl_pb.CreateTerminatorResult_FailedOther, ctx.err, logger)
|
||||
errCode := edge_ctrl_pb.CreateTerminatorResult_FailedOther
|
||||
if errors.Is(ctx.err, InvalidSessionError{}) {
|
||||
errCode = edge_ctrl_pb.CreateTerminatorResult_FailedInvalidSession
|
||||
}
|
||||
self.returnError(ctx, errCode, ctx.err, logger)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -146,6 +152,7 @@ func (self *createTerminatorV2Handler) CreateTerminatorV2(ctx *CreateTerminatorV
|
||||
Context: ctx.newChangeContext(),
|
||||
}
|
||||
|
||||
createStart := time.Now()
|
||||
if err := self.appEnv.GetHostController().GetNetwork().Managers.Command.Dispatch(cmd); err != nil {
|
||||
// terminator might have been created while we were trying to create.
|
||||
if terminator, _ = self.getNetwork().Terminators.Read(ctx.req.Address); terminator != nil {
|
||||
@@ -162,7 +169,9 @@ func (self *createTerminatorV2Handler) CreateTerminatorV2(ctx *CreateTerminatorV
|
||||
return
|
||||
}
|
||||
} else {
|
||||
logger.WithField("terminator", terminator.Id).Info("created terminator")
|
||||
logger.WithField("terminator", terminator.Id).
|
||||
WithField("createTime", time.Since(createStart)).
|
||||
Info("created terminator")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -183,7 +192,7 @@ func (self *createTerminatorV2Handler) CreateTerminatorV2(ctx *CreateTerminatorV
|
||||
logger.WithError(err).Error("failed to send CreateTunnelTerminatorResponse")
|
||||
}
|
||||
|
||||
logger.Info("completed create terminator v2 operation")
|
||||
logger.WithField("elapsed", time.Since(start)).Info("completed create terminator v2 operation")
|
||||
}
|
||||
|
||||
func (self *createTerminatorV2Handler) returnError(ctx *CreateTerminatorV2RequestContext, resultType edge_ctrl_pb.CreateTerminatorResult, err error, logger *logrus.Entry) {
|
||||
|
||||
@@ -1,3 +1,19 @@
|
||||
/*
|
||||
Copyright NetFoundry Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
https://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package handler_edge_ctrl
|
||||
|
||||
import "github.com/openziti/sdk-golang/ziti/edge"
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
Copyright NetFoundry Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
https://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package handler_edge_ctrl
|
||||
|
||||
import (
|
||||
"github.com/pkg/errors"
|
||||
"github.com/stretchr/testify/require"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func Test_ErrorsIs(t *testing.T) {
|
||||
err := error(InvalidSessionError{})
|
||||
req := require.New(t)
|
||||
req.True(errors.Is(err, InvalidSessionError{}))
|
||||
}
|
||||
@@ -51,6 +51,12 @@ func (bindHandler *BindHandler) BindChannel(binding channel.Binding) error {
|
||||
Handler: validateLinksRequestHandler.HandleReceive,
|
||||
})
|
||||
|
||||
validateSdkTerminatorsRequestHandler := newValidateRouterSdkTerminatorsHandler(bindHandler.network)
|
||||
binding.AddTypedReceiveHandler(&channel.AsyncFunctionReceiveAdapter{
|
||||
Type: validateSdkTerminatorsRequestHandler.ContentType(),
|
||||
Handler: validateSdkTerminatorsRequestHandler.HandleReceive,
|
||||
})
|
||||
|
||||
tracesHandler := newStreamTracesHandler(bindHandler.network)
|
||||
binding.AddTypedReceiveHandler(tracesHandler)
|
||||
binding.AddCloseHandler(tracesHandler)
|
||||
|
||||
@@ -0,0 +1,88 @@
|
||||
/*
|
||||
Copyright NetFoundry Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
https://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package handler_mgmt
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/michaelquigley/pfxlog"
|
||||
"github.com/openziti/channel/v2"
|
||||
"github.com/openziti/channel/v2/protobufs"
|
||||
"github.com/openziti/ziti/common/pb/mgmt_pb"
|
||||
"github.com/openziti/ziti/controller/network"
|
||||
"google.golang.org/protobuf/proto"
|
||||
"time"
|
||||
)
|
||||
|
||||
type validateRouterSdkTerminatorsHandler struct {
|
||||
network *network.Network
|
||||
}
|
||||
|
||||
func newValidateRouterSdkTerminatorsHandler(network *network.Network) *validateRouterSdkTerminatorsHandler {
|
||||
return &validateRouterSdkTerminatorsHandler{network: network}
|
||||
}
|
||||
|
||||
func (*validateRouterSdkTerminatorsHandler) ContentType() int32 {
|
||||
return int32(mgmt_pb.ContentType_ValidateRouterSdkTerminatorsRequestType)
|
||||
}
|
||||
|
||||
func (handler *validateRouterSdkTerminatorsHandler) HandleReceive(msg *channel.Message, ch channel.Channel) {
|
||||
log := pfxlog.ContextLogger(ch.Label())
|
||||
request := &mgmt_pb.ValidateRouterSdkTerminatorsRequest{}
|
||||
|
||||
var err error
|
||||
|
||||
var count int64
|
||||
var evalF func()
|
||||
if err = proto.Unmarshal(msg.Body, request); err == nil {
|
||||
count, evalF, err = handler.network.ValidateRouterSdkTerminators(request.Filter, func(detail *mgmt_pb.RouterSdkTerminatorsDetails) {
|
||||
if !ch.IsClosed() {
|
||||
if sendErr := protobufs.MarshalTyped(detail).WithTimeout(15 * time.Second).SendAndWaitForWire(ch); sendErr != nil {
|
||||
log.WithError(sendErr).Error("send of sdk terminators detail failed, closing channel")
|
||||
if closeErr := ch.Close(); closeErr != nil {
|
||||
log.WithError(closeErr).Error("failed to close channel")
|
||||
}
|
||||
}
|
||||
} else {
|
||||
log.Info("channel closed, unable to send sdk terminators detail")
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
response := &mgmt_pb.ValidateRouterSdkTerminatorsResponse{
|
||||
Success: err == nil,
|
||||
RouterCount: uint64(count),
|
||||
}
|
||||
if err != nil {
|
||||
response.Message = fmt.Sprintf("%v: failed to unmarshall request: %v", handler.network.GetAppId(), err)
|
||||
}
|
||||
|
||||
body, err := proto.Marshal(response)
|
||||
if err != nil {
|
||||
pfxlog.Logger().WithError(err).Error("unexpected error serializing ValidateRouterSdkTerminatorsResponse")
|
||||
return
|
||||
}
|
||||
|
||||
responseMsg := channel.NewMessage(int32(mgmt_pb.ContentType_ValidateRouterSdkTerminatorsResponseType), body)
|
||||
responseMsg.ReplyTo(msg)
|
||||
if err = ch.Send(responseMsg); err != nil {
|
||||
pfxlog.Logger().WithError(err).Error("unexpected error sending ValidateRouterSdkTerminatorsResponse")
|
||||
}
|
||||
|
||||
if evalF != nil {
|
||||
evalF()
|
||||
}
|
||||
}
|
||||
@@ -28,6 +28,7 @@ import (
|
||||
"github.com/openziti/foundation/v2/errorz"
|
||||
"github.com/openziti/metrics"
|
||||
"github.com/openziti/ziti/controller/apierror"
|
||||
"github.com/openziti/ziti/controller/command"
|
||||
"github.com/openziti/ziti/controller/env"
|
||||
"github.com/openziti/ziti/controller/internal/permissions"
|
||||
"github.com/openziti/ziti/controller/model"
|
||||
@@ -43,7 +44,8 @@ func init() {
|
||||
}
|
||||
|
||||
type AuthRouter struct {
|
||||
createTimer metrics.Timer
|
||||
createTimer metrics.Timer
|
||||
lastAdminAuth concurrenz.AtomicValue[time.Time]
|
||||
}
|
||||
|
||||
func NewAuthRouter() *AuthRouter {
|
||||
@@ -181,11 +183,23 @@ func (ro *AuthRouter) authHandler(ae *env.AppEnv, rc *response.RequestContext, h
|
||||
|
||||
var sessionIdHolder concurrenz.AtomicValue[string]
|
||||
|
||||
ctrl, err := ae.AuthRateLimiter.RunRateLimited(func() error {
|
||||
sessionId, err := ae.Managers.ApiSession.Create(changeCtx.NewMutateContext(), newApiSession, sessionCerts)
|
||||
lastAdminAuth := ro.lastAdminAuth.Load()
|
||||
allowAdminBypass := identity.IsAdmin && time.Since(lastAdminAuth) > 10*time.Second &&
|
||||
ro.lastAdminAuth.CompareAndSwap(lastAdminAuth, time.Now())
|
||||
|
||||
var ctrl command.RateLimitControl
|
||||
if allowAdminBypass {
|
||||
var sessionId string
|
||||
sessionId, err = ae.Managers.ApiSession.Create(changeCtx.NewMutateContext(), newApiSession, sessionCerts)
|
||||
sessionIdHolder.Store(sessionId)
|
||||
return err
|
||||
})
|
||||
ctrl = command.NoOpRateLimitControl()
|
||||
} else {
|
||||
ctrl, err = ae.AuthRateLimiter.RunRateLimited(func() error {
|
||||
sessionId, err := ae.Managers.ApiSession.Create(changeCtx.NewMutateContext(), newApiSession, sessionCerts)
|
||||
sessionIdHolder.Store(sessionId)
|
||||
return err
|
||||
})
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
rc.RespondWithError(err)
|
||||
@@ -223,7 +237,7 @@ func (ro *AuthRouter) authHandler(ae *env.AppEnv, rc *response.RequestContext, h
|
||||
if writeOk {
|
||||
ctrl.Success()
|
||||
} else {
|
||||
ctrl.Timeout()
|
||||
ctrl.Backoff()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -375,6 +375,8 @@ func fillInfo(identity *rest_model.IdentityDetail, envInfo *model.EnvInfo, sdkIn
|
||||
Os: envInfo.Os,
|
||||
OsRelease: envInfo.OsRelease,
|
||||
OsVersion: envInfo.OsVersion,
|
||||
Domain: envInfo.Domain,
|
||||
Hostname: envInfo.Hostname,
|
||||
}
|
||||
} else {
|
||||
identity.EnvInfo = &rest_model.EnvInfo{}
|
||||
|
||||
@@ -37,6 +37,7 @@ import (
|
||||
"github.com/openziti/ziti/controller/models"
|
||||
"github.com/openziti/ziti/controller/response"
|
||||
"github.com/sirupsen/logrus"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
@@ -109,7 +110,9 @@ func (r *IdentityRouter) Register(ae *env.AppEnv) {
|
||||
|
||||
// service list
|
||||
ae.ManagementApi.IdentityListIdentityServicesHandler = identity.ListIdentityServicesHandlerFunc(func(params identity.ListIdentityServicesParams, _ interface{}) middleware.Responder {
|
||||
return ae.IsAllowed(r.listServices, params.HTTPRequest, params.ID, "", permissions.IsAdmin())
|
||||
return ae.IsAllowed(func(ae *env.AppEnv, rc *response.RequestContext) {
|
||||
r.listServices(ae, rc, params)
|
||||
}, params.HTTPRequest, params.ID, "", permissions.IsAdmin())
|
||||
})
|
||||
|
||||
// service configs crud
|
||||
@@ -239,8 +242,19 @@ func (r *IdentityRouter) listServicePolicies(ae *env.AppEnv, rc *response.Reques
|
||||
ListAssociationWithHandler[*model.Identity, *model.ServicePolicy](ae, rc, ae.Managers.Identity, ae.Managers.ServicePolicy, MapServicePolicyToRestEntity)
|
||||
}
|
||||
|
||||
func (r *IdentityRouter) listServices(ae *env.AppEnv, rc *response.RequestContext) {
|
||||
filterTemplate := `not isEmpty(from servicePolicies where anyOf(identities) = "%v")`
|
||||
func (r *IdentityRouter) listServices(ae *env.AppEnv, rc *response.RequestContext, params identity.ListIdentityServicesParams) {
|
||||
typeFilter := ""
|
||||
if params.PolicyType != nil {
|
||||
if strings.EqualFold(*params.PolicyType, db.PolicyTypeBind.String()) {
|
||||
typeFilter = fmt.Sprintf(` and type = %d`, db.PolicyTypeBind.Id())
|
||||
}
|
||||
|
||||
if strings.EqualFold(*params.PolicyType, db.PolicyTypeDial.String()) {
|
||||
typeFilter = fmt.Sprintf(` and type = %d`, db.PolicyTypeDial.Id())
|
||||
}
|
||||
}
|
||||
|
||||
filterTemplate := `not isEmpty(from servicePolicies where anyOf(identities) = "%v"` + typeFilter + ")"
|
||||
ListAssociationsWithFilter[*model.ServiceDetail](ae, rc, filterTemplate, ae.Managers.EdgeService.GetDetailLister(), MapServiceToRestEntity)
|
||||
}
|
||||
|
||||
|
||||
@@ -17,12 +17,14 @@
|
||||
package routes
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/go-openapi/runtime/middleware"
|
||||
"github.com/michaelquigley/pfxlog"
|
||||
clientService "github.com/openziti/edge-api/rest_client_api_server/operations/service"
|
||||
managementService "github.com/openziti/edge-api/rest_management_api_server/operations/service"
|
||||
"github.com/openziti/metrics"
|
||||
"github.com/openziti/storage/boltz"
|
||||
"github.com/openziti/ziti/controller/db"
|
||||
"github.com/openziti/ziti/controller/fields"
|
||||
"github.com/openziti/ziti/controller/model"
|
||||
"github.com/openziti/ziti/controller/models"
|
||||
@@ -105,7 +107,9 @@ func (r *ServiceRouter) Register(ae *env.AppEnv) {
|
||||
})
|
||||
|
||||
ae.ManagementApi.ServiceListServiceIdentitiesHandler = managementService.ListServiceIdentitiesHandlerFunc(func(params managementService.ListServiceIdentitiesParams, _ interface{}) middleware.Responder {
|
||||
return ae.IsAllowed(r.listIdentities, params.HTTPRequest, params.ID, "", permissions.IsAdmin())
|
||||
return ae.IsAllowed(func(ae *env.AppEnv, rc *response.RequestContext) {
|
||||
r.listIdentities(ae, rc, params)
|
||||
}, params.HTTPRequest, params.ID, "", permissions.IsAdmin())
|
||||
})
|
||||
|
||||
ae.ManagementApi.ServiceListServiceConfigHandler = managementService.ListServiceConfigHandlerFunc(func(params managementService.ListServiceConfigParams, _ interface{}) middleware.Responder {
|
||||
@@ -292,8 +296,19 @@ func (r *ServiceRouter) listClientTerminators(ae *env.AppEnv, rc *response.Reque
|
||||
ListTerminatorAssociations(ae, rc, ae.Managers.EdgeService, ae.Managers.Terminator, MapClientTerminatorToRestEntity)
|
||||
}
|
||||
|
||||
func (r *ServiceRouter) listIdentities(ae *env.AppEnv, rc *response.RequestContext) {
|
||||
filterTemplate := `not isEmpty(from servicePolicies where anyOf(services) = "%v")`
|
||||
func (r *ServiceRouter) listIdentities(ae *env.AppEnv, rc *response.RequestContext, params managementService.ListServiceIdentitiesParams) {
|
||||
typeFilter := ""
|
||||
if params.PolicyType != nil {
|
||||
if strings.EqualFold(*params.PolicyType, db.PolicyTypeBind.String()) {
|
||||
typeFilter = fmt.Sprintf(` and type = %d`, db.PolicyTypeBind.Id())
|
||||
}
|
||||
|
||||
if strings.EqualFold(*params.PolicyType, db.PolicyTypeDial.String()) {
|
||||
typeFilter = fmt.Sprintf(` and type = %d`, db.PolicyTypeDial.Id())
|
||||
}
|
||||
}
|
||||
|
||||
filterTemplate := `not isEmpty(from servicePolicies where anyOf(services) = "%v"` + typeFilter + ")"
|
||||
ListAssociationsWithFilter[*model.Identity](ae, rc, filterTemplate, ae.Managers.Identity, MapIdentityToRestEntity)
|
||||
}
|
||||
|
||||
|
||||
@@ -22,12 +22,12 @@ import (
|
||||
clientInformational "github.com/openziti/edge-api/rest_client_api_server/operations/informational"
|
||||
managementInformational "github.com/openziti/edge-api/rest_management_api_server/operations/informational"
|
||||
"github.com/openziti/edge-api/rest_model"
|
||||
"github.com/openziti/xweb/v2"
|
||||
"github.com/openziti/ziti/common/build"
|
||||
"github.com/openziti/ziti/controller"
|
||||
"github.com/openziti/ziti/controller/env"
|
||||
"github.com/openziti/ziti/controller/internal/permissions"
|
||||
"github.com/openziti/ziti/controller/response"
|
||||
"github.com/openziti/ziti/common/build"
|
||||
"github.com/openziti/xweb/v2"
|
||||
"runtime"
|
||||
"sync"
|
||||
)
|
||||
|
||||
@@ -448,6 +448,8 @@ func (self *IdentityManager) PatchInfo(identity *Identity, changeCtx *change.Con
|
||||
db.FieldIdentityEnvInfoOs: struct{}{},
|
||||
db.FieldIdentityEnvInfoOsRelease: struct{}{},
|
||||
db.FieldIdentityEnvInfoOsVersion: struct{}{},
|
||||
db.FieldIdentityEnvInfoDomain: struct{}{},
|
||||
db.FieldIdentityEnvInfoHostname: struct{}{},
|
||||
db.FieldIdentitySdkInfoBranch: struct{}{},
|
||||
db.FieldIdentitySdkInfoRevision: struct{}{},
|
||||
db.FieldIdentitySdkInfoType: struct{}{},
|
||||
@@ -571,6 +573,8 @@ func (self *IdentityManager) IdentityToProtobuf(entity *Identity) (*edge_cmd_pb.
|
||||
Os: entity.EnvInfo.Os,
|
||||
OsRelease: entity.EnvInfo.OsRelease,
|
||||
OsVersion: entity.EnvInfo.OsVersion,
|
||||
Domain: entity.EnvInfo.Domain,
|
||||
Hostname: entity.EnvInfo.Hostname,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -642,6 +646,8 @@ func (self *IdentityManager) ProtobufToIdentity(msg *edge_cmd_pb.Identity) (*Ide
|
||||
Os: msg.EnvInfo.Os,
|
||||
OsRelease: msg.EnvInfo.OsRelease,
|
||||
OsVersion: msg.EnvInfo.OsVersion,
|
||||
Domain: msg.EnvInfo.Domain,
|
||||
Hostname: msg.EnvInfo.Hostname,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -795,13 +801,13 @@ func (statusMap *identityStatusMap) HasEdgeRouterConnection(identityId string) b
|
||||
WithField("identityId", identityId).
|
||||
WithField("expiresAt", stat.expiresAt).
|
||||
WithField("now", now).
|
||||
Debugf("reporting identity from active ER conn pool: timedout")
|
||||
Tracef("reporting identity from active ER conn pool: timedout")
|
||||
return ret
|
||||
}
|
||||
|
||||
pfxlog.Logger().
|
||||
WithField("identityId", identityId).
|
||||
Debugf("reporting identity from active ER conn pool: not found")
|
||||
Tracef("reporting identity from active ER conn pool: not found")
|
||||
return false
|
||||
}
|
||||
|
||||
|
||||
@@ -31,6 +31,8 @@ type EnvInfo struct {
|
||||
Os string
|
||||
OsRelease string
|
||||
OsVersion string
|
||||
Domain string
|
||||
Hostname string
|
||||
}
|
||||
|
||||
func (self *EnvInfo) Equals(other *EnvInfo) bool {
|
||||
@@ -43,7 +45,9 @@ func (self *EnvInfo) Equals(other *EnvInfo) bool {
|
||||
return self.Arch == other.Arch &&
|
||||
self.Os == other.Os &&
|
||||
self.OsRelease == other.OsRelease &&
|
||||
self.OsVersion == other.OsVersion
|
||||
self.OsVersion == other.OsVersion &&
|
||||
self.Domain == other.Domain &&
|
||||
self.Hostname == other.Hostname
|
||||
}
|
||||
|
||||
type SdkInfo struct {
|
||||
@@ -137,6 +141,8 @@ func (entity *Identity) toBoltEntityForCreate(_ *bbolt.Tx, env Env) (*db.Identit
|
||||
Os: entity.EnvInfo.Os,
|
||||
OsRelease: entity.EnvInfo.OsRelease,
|
||||
OsVersion: entity.EnvInfo.OsVersion,
|
||||
Domain: entity.EnvInfo.Domain,
|
||||
Hostname: entity.EnvInfo.Hostname,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -162,6 +168,8 @@ func fillModelInfo(identity *Identity, envInfo *db.EnvInfo, sdkInfo *db.SdkInfo)
|
||||
Os: envInfo.Os,
|
||||
OsRelease: envInfo.OsRelease,
|
||||
OsVersion: envInfo.OsVersion,
|
||||
Domain: envInfo.Domain,
|
||||
Hostname: envInfo.Hostname,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -184,6 +192,8 @@ func fillPersistenceInfo(identity *db.Identity, envInfo *EnvInfo, sdkInfo *SdkIn
|
||||
Os: envInfo.Os,
|
||||
OsRelease: envInfo.OsRelease,
|
||||
OsVersion: envInfo.OsVersion,
|
||||
Domain: envInfo.Domain,
|
||||
Hostname: envInfo.Hostname,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -27,6 +27,7 @@ import (
|
||||
fabricMetrics "github.com/openziti/ziti/common/metrics"
|
||||
"github.com/openziti/ziti/common/pb/mgmt_pb"
|
||||
"github.com/openziti/ziti/controller/event"
|
||||
"github.com/openziti/ziti/controller/raft"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"runtime/debug"
|
||||
@@ -110,7 +111,7 @@ type Network struct {
|
||||
}
|
||||
|
||||
func NewNetwork(config Config) (*Network, error) {
|
||||
stores, err := db.InitStores(config.GetDb())
|
||||
stores, err := db.InitStores(config.GetDb(), config.GetCommandDispatcher().GetRateLimiter())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -345,23 +346,7 @@ func (network *Network) ValidateTerminators(r *Router) {
|
||||
return
|
||||
}
|
||||
|
||||
var terminators []*ctrl_pb.Terminator
|
||||
|
||||
for _, terminator := range result.Entities {
|
||||
terminators = append(terminators, &ctrl_pb.Terminator{
|
||||
Id: terminator.Id,
|
||||
Binding: terminator.Binding,
|
||||
Address: terminator.Address,
|
||||
})
|
||||
}
|
||||
|
||||
req := &ctrl_pb.ValidateTerminatorsRequest{
|
||||
Terminators: terminators,
|
||||
}
|
||||
|
||||
if err = protobufs.MarshalTyped(req).Send(r.Control); err != nil {
|
||||
logger.WithError(err).Error("unexpected error sending ValidateTerminatorsRequest")
|
||||
}
|
||||
network.Managers.RouterMessaging.ValidateRouterTerminators(result.Entities)
|
||||
}
|
||||
|
||||
type LinkValidationCallback func(detail *mgmt_pb.RouterLinkDetails)
|
||||
@@ -392,6 +377,34 @@ func (n *Network) ValidateLinks(filter string, cb LinkValidationCallback) (int64
|
||||
return int64(len(result.Entities)), evalF, nil
|
||||
}
|
||||
|
||||
type SdkTerminatorValidationCallback func(detail *mgmt_pb.RouterSdkTerminatorsDetails)
|
||||
|
||||
func (n *Network) ValidateRouterSdkTerminators(filter string, cb SdkTerminatorValidationCallback) (int64, func(), error) {
|
||||
result, err := n.Routers.BaseList(filter)
|
||||
if err != nil {
|
||||
return 0, nil, err
|
||||
}
|
||||
|
||||
sem := concurrenz.NewSemaphore(10)
|
||||
|
||||
evalF := func() {
|
||||
for _, router := range result.Entities {
|
||||
connectedRouter := n.GetConnectedRouter(router.Id)
|
||||
if connectedRouter != nil {
|
||||
sem.Acquire()
|
||||
go func() {
|
||||
defer sem.Release()
|
||||
n.Routers.ValidateRouterSdkTerminators(connectedRouter, cb)
|
||||
}()
|
||||
} else {
|
||||
n.Routers.reportRouterSdkTerminatorsError(router, errors.New("router not connected"), cb)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return int64(len(result.Entities)), evalF, nil
|
||||
}
|
||||
|
||||
func (network *Network) DisconnectRouter(r *Router) {
|
||||
// 1: remove Links for Router
|
||||
for _, l := range r.routerLinks.GetLinks() {
|
||||
@@ -1263,6 +1276,30 @@ func (network *Network) Inspect(name string) (*string, error) {
|
||||
val, err := json.Marshal(result)
|
||||
strVal := string(val)
|
||||
return &strVal, err
|
||||
} else if lc == "connected-peers" {
|
||||
if raftController, ok := network.Dispatcher.(*raft.Controller); ok {
|
||||
members, err := raftController.ListMembers()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result, err := json.Marshal(members)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to marshall cluster member list to json (%w)", err)
|
||||
}
|
||||
resultStr := string(result)
|
||||
return &resultStr, nil
|
||||
}
|
||||
} else if lc == "router-messaging" {
|
||||
routerMessagingState, err := network.Managers.RouterMessaging.Inspect()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result, err := json.Marshal(routerMessagingState)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to marshall router messaging state to json (%w)", err)
|
||||
}
|
||||
resultStr := string(result)
|
||||
return &resultStr, nil
|
||||
}
|
||||
|
||||
return nil, nil
|
||||
|
||||
@@ -17,16 +17,22 @@
|
||||
package network
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"github.com/openziti/channel/v2/protobufs"
|
||||
"github.com/openziti/foundation/v2/genext"
|
||||
"github.com/openziti/foundation/v2/versions"
|
||||
"github.com/openziti/ziti/common/inspect"
|
||||
"github.com/openziti/ziti/common/pb/cmd_pb"
|
||||
"github.com/openziti/ziti/common/pb/ctrl_pb"
|
||||
"github.com/openziti/ziti/common/pb/mgmt_pb"
|
||||
"github.com/openziti/ziti/controller/change"
|
||||
"github.com/openziti/ziti/controller/command"
|
||||
"github.com/openziti/ziti/controller/fields"
|
||||
"github.com/openziti/ziti/controller/xt"
|
||||
"google.golang.org/protobuf/proto"
|
||||
"reflect"
|
||||
"strings"
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
@@ -460,6 +466,100 @@ func (self *RouterManager) Unmarshall(bytes []byte) (*Router, error) {
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (self *RouterManager) ValidateRouterSdkTerminators(router *Router, cb SdkTerminatorValidationCallback) {
|
||||
request := &ctrl_pb.InspectRequest{RequestedValues: []string{"sdk-terminators"}}
|
||||
resp := &ctrl_pb.InspectResponse{}
|
||||
respMsg, err := protobufs.MarshalTyped(request).WithTimeout(time.Minute).SendForReply(router.Control)
|
||||
if err = protobufs.TypedResponse(resp).Unmarshall(respMsg, err); err != nil {
|
||||
self.reportRouterSdkTerminatorsError(router, err, cb)
|
||||
return
|
||||
}
|
||||
|
||||
var inspectResult *inspect.SdkTerminatorInspectResult
|
||||
for _, val := range resp.Values {
|
||||
if val.Name == "sdk-terminators" {
|
||||
if err = json.Unmarshal([]byte(val.Value), &inspectResult); err != nil {
|
||||
self.reportRouterSdkTerminatorsError(router, err, cb)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if inspectResult == nil {
|
||||
if len(resp.Errors) > 0 {
|
||||
err = errors.New(strings.Join(resp.Errors, ","))
|
||||
self.reportRouterSdkTerminatorsError(router, err, cb)
|
||||
return
|
||||
}
|
||||
self.reportRouterSdkTerminatorsError(router, errors.New("no terminator details returned from router"), cb)
|
||||
return
|
||||
}
|
||||
|
||||
listResult, err := self.Terminators.BaseList(fmt.Sprintf(`router="%s" and binding="edge" limit none`, router.Id))
|
||||
if err != nil {
|
||||
self.reportRouterSdkTerminatorsError(router, err, cb)
|
||||
return
|
||||
}
|
||||
|
||||
result := &mgmt_pb.RouterSdkTerminatorsDetails{
|
||||
RouterId: router.Id,
|
||||
RouterName: router.Name,
|
||||
ValidateSuccess: true,
|
||||
}
|
||||
|
||||
terminators := map[string]*Terminator{}
|
||||
|
||||
for _, terminator := range listResult.Entities {
|
||||
terminators[terminator.Id] = terminator
|
||||
}
|
||||
|
||||
for _, entry := range inspectResult.Entries {
|
||||
detail := &mgmt_pb.RouterSdkTerminatorDetail{
|
||||
TerminatorId: entry.Id,
|
||||
RouterState: entry.State,
|
||||
IsValid: true,
|
||||
OperaationActive: entry.OperationActive,
|
||||
CreateTime: entry.CreateTime,
|
||||
LastAttempt: entry.LastAttempt,
|
||||
}
|
||||
result.Details = append(result.Details, detail)
|
||||
|
||||
if entry.State != "established" {
|
||||
detail.IsValid = false
|
||||
}
|
||||
|
||||
if _, found := terminators[entry.Id]; found {
|
||||
detail.CtrlState = mgmt_pb.TerminatorState_Valid
|
||||
delete(terminators, entry.Id)
|
||||
} else {
|
||||
detail.CtrlState = mgmt_pb.TerminatorState_Unknown
|
||||
detail.IsValid = false
|
||||
}
|
||||
}
|
||||
|
||||
for _, terminator := range terminators {
|
||||
detail := &mgmt_pb.RouterSdkTerminatorDetail{
|
||||
TerminatorId: terminator.Id,
|
||||
CtrlState: mgmt_pb.TerminatorState_Valid,
|
||||
RouterState: "unknown",
|
||||
IsValid: false,
|
||||
}
|
||||
result.Details = append(result.Details, detail)
|
||||
}
|
||||
|
||||
cb(result)
|
||||
}
|
||||
|
||||
func (self *RouterManager) reportRouterSdkTerminatorsError(router *Router, err error, cb SdkTerminatorValidationCallback) {
|
||||
result := &mgmt_pb.RouterSdkTerminatorsDetails{
|
||||
RouterId: router.Id,
|
||||
RouterName: router.Name,
|
||||
ValidateSuccess: false,
|
||||
Message: err.Error(),
|
||||
}
|
||||
cb(result)
|
||||
}
|
||||
|
||||
type RouterLinks struct {
|
||||
sync.Mutex
|
||||
allLinks atomic.Value
|
||||
|
||||
@@ -17,11 +17,17 @@
|
||||
package network
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"github.com/michaelquigley/pfxlog"
|
||||
"github.com/openziti/channel/v2"
|
||||
"github.com/openziti/channel/v2/protobufs"
|
||||
"github.com/openziti/foundation/v2/goroutines"
|
||||
"github.com/openziti/storage/boltz"
|
||||
"github.com/openziti/ziti/common/inspect"
|
||||
"github.com/openziti/ziti/common/pb/ctrl_pb"
|
||||
log "github.com/sirupsen/logrus"
|
||||
"github.com/openziti/ziti/controller/change"
|
||||
"github.com/openziti/ziti/controller/db"
|
||||
"github.com/openziti/ziti/controller/xt"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
)
|
||||
@@ -37,24 +43,49 @@ func (self *routerUpdates) stateUpdated(routerId string) {
|
||||
self.changedRouters[routerId] = struct{}{}
|
||||
}
|
||||
|
||||
type terminatorInfo struct {
|
||||
xt.Terminator
|
||||
marker uint64
|
||||
}
|
||||
type terminatorValidations struct {
|
||||
terminators map[string]terminatorInfo
|
||||
checkInProgress atomic.Bool
|
||||
lastSend time.Time
|
||||
}
|
||||
|
||||
type routerEvent interface {
|
||||
handle(c *RouterMessaging)
|
||||
}
|
||||
|
||||
func NewRouterMessaging(managers *Managers, routerCommPool goroutines.Pool) *RouterMessaging {
|
||||
return &RouterMessaging{
|
||||
managers: managers,
|
||||
eventsC: make(chan routerEvent, 16),
|
||||
routers: map[string]*routerUpdates{},
|
||||
routerCommPool: routerCommPool,
|
||||
result := &RouterMessaging{
|
||||
managers: managers,
|
||||
eventsC: make(chan routerEvent, 16),
|
||||
routerUpdates: map[string]*routerUpdates{},
|
||||
terminatorValidations: map[string]*terminatorValidations{},
|
||||
routerCommPool: routerCommPool,
|
||||
}
|
||||
|
||||
managers.stores.Terminator.AddEntityEventListenerF(result.TerminatorCreated, boltz.EntityCreated)
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
type RouterMessaging struct {
|
||||
managers *Managers
|
||||
eventsC chan routerEvent
|
||||
routers map[string]*routerUpdates
|
||||
routerCommPool goroutines.Pool
|
||||
managers *Managers
|
||||
eventsC chan routerEvent
|
||||
routerUpdates map[string]*routerUpdates
|
||||
terminatorValidations map[string]*terminatorValidations
|
||||
routerCommPool goroutines.Pool
|
||||
markerCounter atomic.Uint64
|
||||
}
|
||||
|
||||
func (self *RouterMessaging) getNextMarker() uint64 {
|
||||
result := self.markerCounter.Add(1)
|
||||
for result == 0 {
|
||||
result = self.markerCounter.Add(1)
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
func (self *RouterMessaging) RouterConnected(r *Router) {
|
||||
@@ -69,6 +100,12 @@ func (self *RouterMessaging) RouterDeleted(routerId string) {
|
||||
self.routerChanged(routerId, false)
|
||||
}
|
||||
|
||||
func (self *RouterMessaging) TerminatorCreated(terminator *db.Terminator) {
|
||||
self.queueEvent(&terminatorCreatedEvent{
|
||||
terminator: terminator,
|
||||
})
|
||||
}
|
||||
|
||||
func (self *RouterMessaging) routerChanged(routerId string, connected bool) {
|
||||
self.queueEvent(&routerChangedEvent{
|
||||
routerId: routerId,
|
||||
@@ -106,30 +143,52 @@ func (self *RouterMessaging) run() {
|
||||
}
|
||||
}
|
||||
|
||||
if len(self.routers) > 0 {
|
||||
if len(self.routerUpdates) > 0 {
|
||||
self.syncStates()
|
||||
}
|
||||
|
||||
if len(self.terminatorValidations) > 0 {
|
||||
self.sendTerminatorValidationRequests()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (self *RouterMessaging) getRouterStates(routerId string) *routerUpdates {
|
||||
result, found := self.routers[routerId]
|
||||
result, found := self.routerUpdates[routerId]
|
||||
if !found {
|
||||
result = &routerUpdates{
|
||||
changedRouters: map[string]struct{}{},
|
||||
}
|
||||
self.routers[routerId] = result
|
||||
self.routerUpdates[routerId] = result
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
func (self *RouterMessaging) getTerminatorValidations(routerId string) *terminatorValidations {
|
||||
result, found := self.terminatorValidations[routerId]
|
||||
if !found {
|
||||
result = &terminatorValidations{
|
||||
terminators: map[string]terminatorInfo{},
|
||||
}
|
||||
self.terminatorValidations[routerId] = result
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
func (self *RouterMessaging) syncStates() {
|
||||
for k, v := range self.routers {
|
||||
for k, v := range self.routerUpdates {
|
||||
notifyRouterId := k
|
||||
updates := v
|
||||
changes := &ctrl_pb.PeerStateChanges{}
|
||||
notifyRouter := self.managers.Routers.getConnected(notifyRouterId)
|
||||
if notifyRouter == nil {
|
||||
// if the router disconnected, we're going to sync everything anyway, so clear anything pending here
|
||||
delete(self.routerUpdates, k)
|
||||
continue
|
||||
}
|
||||
|
||||
if v.sendInProgress.Load() {
|
||||
|
||||
continue
|
||||
}
|
||||
|
||||
@@ -165,7 +224,10 @@ func (self *RouterMessaging) syncStates() {
|
||||
}
|
||||
}
|
||||
|
||||
updates.sendInProgress.Store(true)
|
||||
if !updates.sendInProgress.CompareAndSwap(false, true) {
|
||||
continue
|
||||
}
|
||||
|
||||
currentStatesVersion := updates.version
|
||||
queueErr := self.routerCommPool.QueueOrError(func() {
|
||||
ch := notifyRouter.Control
|
||||
@@ -179,7 +241,7 @@ func (self *RouterMessaging) syncStates() {
|
||||
success = false
|
||||
}
|
||||
|
||||
self.queueEvent(&routerSendDone{
|
||||
self.queueEvent(&routerPeerChangesSendDone{
|
||||
routerId: notifyRouter.Id,
|
||||
version: currentStatesVersion,
|
||||
success: success,
|
||||
@@ -193,13 +255,129 @@ func (self *RouterMessaging) syncStates() {
|
||||
}
|
||||
}
|
||||
|
||||
func (self *RouterMessaging) sendTerminatorValidationRequests() {
|
||||
for routerId, updates := range self.terminatorValidations {
|
||||
self.sendTerminatorValidationRequest(routerId, updates)
|
||||
}
|
||||
}
|
||||
|
||||
func (self *RouterMessaging) sendTerminatorValidationRequest(routerId string, updates *terminatorValidations) {
|
||||
notifyRouter := self.managers.Routers.getConnected(routerId)
|
||||
if notifyRouter == nil {
|
||||
// if the router disconnected, we're going to sync everything anyway, so clear anything pending here
|
||||
delete(self.terminatorValidations, routerId)
|
||||
return
|
||||
}
|
||||
|
||||
if updates.checkInProgress.Load() {
|
||||
if time.Since(updates.lastSend) > 3*time.Minute {
|
||||
updates.checkInProgress.Store(false)
|
||||
} else {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
var terminators []*ctrl_pb.Terminator
|
||||
|
||||
for _, terminator := range updates.terminators {
|
||||
if time.Since(terminator.GetCreatedAt()) > 5*time.Second {
|
||||
pfxlog.Logger().WithField("terminatorId", terminator.GetId()).Info("queuing validate of terminator")
|
||||
terminators = append(terminators, &ctrl_pb.Terminator{
|
||||
Id: terminator.GetId(),
|
||||
Binding: terminator.GetBinding(),
|
||||
Address: terminator.GetAddress(),
|
||||
Marker: terminator.marker,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
if len(terminators) == 0 || !updates.checkInProgress.CompareAndSwap(false, true) {
|
||||
return
|
||||
}
|
||||
|
||||
req := &ctrl_pb.ValidateTerminatorsV2Request{
|
||||
Terminators: terminators,
|
||||
FixInvalid: true,
|
||||
}
|
||||
|
||||
queueErr := self.routerCommPool.QueueOrError(func() {
|
||||
ch := notifyRouter.Control
|
||||
if ch == nil {
|
||||
return
|
||||
}
|
||||
|
||||
if self.managers.Dispatcher.IsLeaderOrLeaderless() {
|
||||
if err := protobufs.MarshalTyped(req).WithTimeout(time.Second * 1).SendAndWaitForWire(ch); err != nil {
|
||||
pfxlog.Logger().WithError(err).WithField("routerId", notifyRouter.Id).Error("failed to send validate terminators request to router")
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
if queueErr != nil {
|
||||
updates.checkInProgress.Store(false)
|
||||
} else {
|
||||
updates.lastSend = time.Now()
|
||||
}
|
||||
}
|
||||
|
||||
func (self *RouterMessaging) NewValidationResponseHandler(n *Network, r *Router) channel.ReceiveHandlerF {
|
||||
return func(m *channel.Message, ch channel.Channel) {
|
||||
log := pfxlog.Logger().WithField("routerId", r.Id)
|
||||
resp := &ctrl_pb.ValidateTerminatorsV2Response{}
|
||||
if err := protobufs.TypedResponse(resp).Unmarshall(m, nil); err != nil {
|
||||
log.WithError(err).Error("unable to unmarshall validate terminators v2 response")
|
||||
return
|
||||
}
|
||||
|
||||
changeCtx := change.NewControlChannelChange(r.Id, r.Name, "fabric.validate.terminator", ch)
|
||||
|
||||
handler := &terminatorValidationRespReceived{
|
||||
router: r,
|
||||
changeCtx: changeCtx,
|
||||
resp: resp,
|
||||
}
|
||||
handler.DeleteInvalid(n)
|
||||
self.queueEvent(handler)
|
||||
}
|
||||
}
|
||||
|
||||
func (self *RouterMessaging) ValidateRouterTerminators(terminators []*Terminator) {
|
||||
self.queueEvent(&validateTerminators{
|
||||
terminators: terminators,
|
||||
})
|
||||
}
|
||||
|
||||
func (self *RouterMessaging) Inspect() (*inspect.RouterMessagingState, error) {
|
||||
evt := &routerMessagingInspectEvent{
|
||||
resultC: make(chan *inspect.RouterMessagingState, 1),
|
||||
}
|
||||
|
||||
timeout := time.After(time.Second)
|
||||
|
||||
select {
|
||||
case self.eventsC <- evt:
|
||||
case <-timeout:
|
||||
return nil, errors.New("timed out waiting to queue inspect event to router messaging")
|
||||
}
|
||||
|
||||
select {
|
||||
case result := <-evt.resultC:
|
||||
return result, nil
|
||||
case <-timeout:
|
||||
return nil, errors.New("timed out waiting for inspect result from router messaging")
|
||||
}
|
||||
}
|
||||
|
||||
type routerChangedEvent struct {
|
||||
routerId string
|
||||
connected bool
|
||||
}
|
||||
|
||||
func (self *routerChangedEvent) handle(c *RouterMessaging) {
|
||||
log.Infof("calculating router updates for router %v, connected=%v", self.routerId, self.connected)
|
||||
pfxlog.Logger().WithField("routerId", self.routerId).
|
||||
WithField("connected", self.connected).
|
||||
Info("calculating router updates for router")
|
||||
|
||||
routers := c.managers.Routers.allConnected()
|
||||
|
||||
var sourceRouterState *routerUpdates
|
||||
@@ -218,18 +396,158 @@ func (self *routerChangedEvent) handle(c *RouterMessaging) {
|
||||
}
|
||||
}
|
||||
|
||||
type routerSendDone struct {
|
||||
type terminatorCreatedEvent struct {
|
||||
terminator *db.Terminator
|
||||
}
|
||||
|
||||
func (self *terminatorCreatedEvent) handle(c *RouterMessaging) {
|
||||
routerStates := c.getTerminatorValidations(self.terminator.Router)
|
||||
routerStates.terminators[self.terminator.Id] = terminatorInfo{
|
||||
Terminator: self.terminator,
|
||||
marker: c.getNextMarker(),
|
||||
}
|
||||
}
|
||||
|
||||
type routerPeerChangesSendDone struct {
|
||||
routerId string
|
||||
version uint32
|
||||
success bool
|
||||
states *routerUpdates
|
||||
}
|
||||
|
||||
func (self *routerSendDone) handle(c *RouterMessaging) {
|
||||
if states, ok := c.routers[self.routerId]; ok {
|
||||
func (self *routerPeerChangesSendDone) handle(c *RouterMessaging) {
|
||||
defer self.states.sendInProgress.Store(false)
|
||||
|
||||
if states, ok := c.routerUpdates[self.routerId]; ok {
|
||||
if self.success && self.version == states.version {
|
||||
delete(c.routers, self.routerId)
|
||||
delete(c.routerUpdates, self.routerId)
|
||||
}
|
||||
}
|
||||
self.states.sendInProgress.Store(false)
|
||||
}
|
||||
|
||||
type validateTerminators struct {
|
||||
terminators []*Terminator
|
||||
}
|
||||
|
||||
func (self *validateTerminators) handle(c *RouterMessaging) {
|
||||
var currentRouterId string
|
||||
var validations *terminatorValidations
|
||||
|
||||
routers := map[string]*terminatorValidations{}
|
||||
|
||||
for _, terminator := range self.terminators {
|
||||
if terminator.Router != currentRouterId || validations == nil {
|
||||
validations = c.getTerminatorValidations(terminator.Router)
|
||||
currentRouterId = terminator.Router
|
||||
routers[currentRouterId] = validations
|
||||
}
|
||||
validations.terminators[terminator.Id] = terminatorInfo{
|
||||
Terminator: terminator,
|
||||
marker: c.getNextMarker(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
type terminatorValidationRespReceived struct {
|
||||
router *Router
|
||||
changeCtx *change.Context
|
||||
resp *ctrl_pb.ValidateTerminatorsV2Response
|
||||
success bool
|
||||
}
|
||||
|
||||
func (self *terminatorValidationRespReceived) DeleteInvalid(n *Network) {
|
||||
log := pfxlog.Logger().WithField("routerId", self.router.Id)
|
||||
|
||||
var toDelete []string
|
||||
for terminatorId, state := range self.resp.States {
|
||||
if !state.Valid {
|
||||
toDelete = append(toDelete, terminatorId)
|
||||
log.WithField("terminatorId", terminatorId).
|
||||
WithField("reason", state.Reason.String()).
|
||||
Info("queuing terminator for delete")
|
||||
}
|
||||
}
|
||||
|
||||
if len(toDelete) > 0 {
|
||||
if err := n.Managers.Terminators.DeleteBatch(toDelete, self.changeCtx); err != nil {
|
||||
for _, terminatorId := range toDelete {
|
||||
log.WithField("terminatorId", terminatorId).
|
||||
WithError(err).
|
||||
Info("batch delete failed")
|
||||
}
|
||||
} else {
|
||||
self.success = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (self *terminatorValidationRespReceived) handle(c *RouterMessaging) {
|
||||
states := c.getTerminatorValidations(self.router.Id)
|
||||
defer states.checkInProgress.Store(false)
|
||||
|
||||
for terminatorId, state := range self.resp.States {
|
||||
if terminator, ok := states.terminators[terminatorId]; ok {
|
||||
if (state.Valid && (state.Marker == 0 || state.Marker == terminator.marker)) || self.success {
|
||||
delete(states.terminators, terminatorId)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if len(states.terminators) == 0 {
|
||||
delete(c.terminatorValidations, self.router.Id)
|
||||
}
|
||||
}
|
||||
|
||||
type routerMessagingInspectEvent struct {
|
||||
resultC chan *inspect.RouterMessagingState
|
||||
}
|
||||
|
||||
func (self *routerMessagingInspectEvent) handle(c *RouterMessaging) {
|
||||
result := &inspect.RouterMessagingState{}
|
||||
|
||||
getRouterName := func(routerId string) string {
|
||||
if router, _ := c.managers.Routers.Read(routerId); router != nil {
|
||||
return router.Name
|
||||
}
|
||||
return "<unknown>"
|
||||
}
|
||||
|
||||
for routerId, updates := range c.routerUpdates {
|
||||
u := &inspect.RouterUpdates{
|
||||
Router: inspect.RouterInfo{
|
||||
Id: routerId,
|
||||
Name: getRouterName(routerId),
|
||||
},
|
||||
Version: updates.version,
|
||||
}
|
||||
for updatedRouterId := range updates.changedRouters {
|
||||
u.ChangedRouters = append(u.ChangedRouters, inspect.RouterInfo{
|
||||
Id: updatedRouterId,
|
||||
Name: getRouterName(updatedRouterId),
|
||||
})
|
||||
}
|
||||
result.RouterUpdates = append(result.RouterUpdates, u)
|
||||
}
|
||||
|
||||
for routerId, pendingValidations := range c.terminatorValidations {
|
||||
v := &inspect.TerminatorValidations{
|
||||
Router: inspect.RouterInfo{
|
||||
Id: routerId,
|
||||
Name: getRouterName(routerId),
|
||||
},
|
||||
CheckInProgress: pendingValidations.checkInProgress.Load(),
|
||||
LastSend: pendingValidations.lastSend.Format("2006-01-02 15:04:05"),
|
||||
}
|
||||
|
||||
for terminatorId := range pendingValidations.terminators {
|
||||
v.Terminators = append(v.Terminators, terminatorId)
|
||||
}
|
||||
|
||||
result.TerminatorValidations = append(result.TerminatorValidations, v)
|
||||
}
|
||||
|
||||
select {
|
||||
case self.resultC <- result:
|
||||
default:
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,12 +28,12 @@ import (
|
||||
)
|
||||
|
||||
type Member struct {
|
||||
Id string
|
||||
Addr string
|
||||
Voter bool
|
||||
Leader bool
|
||||
Version string
|
||||
Connected bool
|
||||
Id string `json:"id"`
|
||||
Addr string `json:"addr"`
|
||||
Voter bool `json:"isVoter"`
|
||||
Leader bool `json:"isLeader"`
|
||||
Version string `json:"version"`
|
||||
Connected bool `json:"isConnected"`
|
||||
}
|
||||
|
||||
func (self *Controller) ListMembers() ([]*Member, error) {
|
||||
|
||||
@@ -247,6 +247,10 @@ func (self *Controller) GetMesh() mesh.Mesh {
|
||||
return self.Mesh
|
||||
}
|
||||
|
||||
func (self *Controller) GetRateLimiter() command.RateLimiter {
|
||||
return self.commandRateLimiter
|
||||
}
|
||||
|
||||
func (self *Controller) ConfigureMeshHandlers(bindHandler channel.BindHandler) {
|
||||
self.Mesh.Init(bindHandler)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
package zac
|
||||
|
||||
import (
|
||||
"github.com/openziti/xweb/v2"
|
||||
"github.com/openziti/ziti/common/spa_handler"
|
||||
log "github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
const (
|
||||
Binding = "zac"
|
||||
)
|
||||
|
||||
type ZitiAdminConsoleFactory struct {
|
||||
}
|
||||
|
||||
var _ xweb.ApiHandlerFactory = &ZitiAdminConsoleFactory{}
|
||||
|
||||
func NewZitiAdminConsoleFactory() *ZitiAdminConsoleFactory {
|
||||
return &ZitiAdminConsoleFactory{}
|
||||
}
|
||||
|
||||
func (factory ZitiAdminConsoleFactory) Validate(*xweb.InstanceConfig) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (factory ZitiAdminConsoleFactory) Binding() string {
|
||||
return Binding
|
||||
}
|
||||
|
||||
func (factory ZitiAdminConsoleFactory) New(_ *xweb.ServerConfig, options map[interface{}]interface{}) (xweb.ApiHandler, error) {
|
||||
loc := options["location"]
|
||||
if loc == nil || loc == "" {
|
||||
log.Fatal("location must be supplied in " + Binding + " options")
|
||||
}
|
||||
indexFile := options["indexFile"]
|
||||
if indexFile == nil || indexFile == "" {
|
||||
indexFile = "index.html"
|
||||
}
|
||||
spa := &spa_handler.SinglePageAppHandler{
|
||||
HttpHandler: spa_handler.SpaHandler(loc.(string), "/"+Binding, indexFile.(string)),
|
||||
BindingKey: Binding,
|
||||
}
|
||||
|
||||
log.Infof("initializing ZAC SPA Handler from %s", loc)
|
||||
return spa, nil
|
||||
}
|
||||
@@ -16,12 +16,13 @@ require (
|
||||
github.com/emirpasic/gods v1.18.1
|
||||
github.com/fatih/color v1.16.0
|
||||
github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa
|
||||
github.com/gaissmai/extnetip v0.4.0
|
||||
github.com/go-acme/lego/v4 v4.15.0
|
||||
github.com/go-openapi/errors v0.21.0
|
||||
github.com/go-openapi/errors v0.22.0
|
||||
github.com/go-openapi/loads v0.21.5
|
||||
github.com/go-openapi/runtime v0.27.1
|
||||
github.com/go-openapi/spec v0.20.14
|
||||
github.com/go-openapi/strfmt v0.22.0
|
||||
github.com/go-openapi/strfmt v0.23.0
|
||||
github.com/go-openapi/swag v0.22.9
|
||||
github.com/go-openapi/validate v0.23.0
|
||||
github.com/go-resty/resty/v2 v2.11.0
|
||||
@@ -34,7 +35,7 @@ require (
|
||||
github.com/gorilla/websocket v1.5.1
|
||||
github.com/hashicorp/go-hclog v1.6.2
|
||||
github.com/hashicorp/golang-lru/v2 v2.0.7
|
||||
github.com/hashicorp/raft v1.6.0
|
||||
github.com/hashicorp/raft v1.6.1
|
||||
github.com/hashicorp/raft-boltdb v0.0.0-20220329195025-15018e9b97e0
|
||||
github.com/jedib0t/go-pretty/v6 v6.5.4
|
||||
github.com/jessevdk/go-flags v1.5.0
|
||||
@@ -48,7 +49,7 @@ require (
|
||||
github.com/natefinch/lumberjack v2.0.0+incompatible
|
||||
github.com/openziti/agent v1.0.16
|
||||
github.com/openziti/channel/v2 v2.0.119
|
||||
github.com/openziti/edge-api v0.26.10
|
||||
github.com/openziti/edge-api v0.26.12
|
||||
github.com/openziti/foundation/v2 v2.0.37
|
||||
github.com/openziti/identity v1.0.70
|
||||
github.com/openziti/jwks v1.0.3
|
||||
@@ -66,22 +67,22 @@ require (
|
||||
github.com/rabbitmq/amqp091-go v1.8.1
|
||||
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475
|
||||
github.com/russross/blackfriday v1.6.0
|
||||
github.com/shirou/gopsutil/v3 v3.24.1
|
||||
github.com/shirou/gopsutil/v3 v3.24.2
|
||||
github.com/sirupsen/logrus v1.9.3
|
||||
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e
|
||||
github.com/spf13/cobra v1.8.0
|
||||
github.com/spf13/pflag v1.0.5
|
||||
github.com/spf13/viper v1.18.2
|
||||
github.com/stretchr/testify v1.8.4
|
||||
github.com/stretchr/testify v1.9.0
|
||||
github.com/teris-io/shortid v0.0.0-20201117134242-e59966efd125
|
||||
github.com/xeipuuv/gojsonschema v1.2.0
|
||||
github.com/zitadel/oidc/v2 v2.12.0
|
||||
go.etcd.io/bbolt v1.3.8
|
||||
go.etcd.io/bbolt v1.3.9
|
||||
go4.org v0.0.0-20180809161055-417644f6feb5
|
||||
golang.org/x/crypto v0.19.0
|
||||
golang.org/x/crypto v0.21.0
|
||||
golang.org/x/net v0.21.0
|
||||
golang.org/x/sync v0.6.0
|
||||
golang.org/x/sys v0.17.0
|
||||
golang.org/x/sys v0.18.0
|
||||
golang.org/x/text v0.14.0
|
||||
google.golang.org/protobuf v1.32.0
|
||||
gopkg.in/AlecAivazis/survey.v1 v1.8.7
|
||||
@@ -111,7 +112,7 @@ require (
|
||||
github.com/eliukblau/pixterm/pkg/ansimage v0.0.0-20191210081756-9fb6cf8c2f75 // indirect
|
||||
github.com/felixge/httpsnoop v1.0.3 // indirect
|
||||
github.com/fsnotify/fsnotify v1.7.0 // indirect
|
||||
github.com/go-jose/go-jose/v3 v3.0.1 // indirect
|
||||
github.com/go-jose/go-jose/v3 v3.0.3 // indirect
|
||||
github.com/go-logr/logr v1.4.1 // indirect
|
||||
github.com/go-logr/stdr v1.2.2 // indirect
|
||||
github.com/go-ole/go-ole v1.3.0 // indirect
|
||||
@@ -172,19 +173,19 @@ require (
|
||||
github.com/valyala/fasttemplate v1.2.2 // indirect
|
||||
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f // indirect
|
||||
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
|
||||
github.com/yusufpapurcu/wmi v1.2.3 // indirect
|
||||
go.mongodb.org/mongo-driver v1.13.1 // indirect
|
||||
github.com/yusufpapurcu/wmi v1.2.4 // indirect
|
||||
go.mongodb.org/mongo-driver v1.14.0 // indirect
|
||||
go.mozilla.org/pkcs7 v0.0.0-20210826202110-33d05740a352 // indirect
|
||||
go.opentelemetry.io/otel v1.21.0 // indirect
|
||||
go.opentelemetry.io/otel/metric v1.21.0 // indirect
|
||||
go.opentelemetry.io/otel/trace v1.21.0 // indirect
|
||||
go.opentelemetry.io/otel v1.24.0 // indirect
|
||||
go.opentelemetry.io/otel/metric v1.24.0 // indirect
|
||||
go.opentelemetry.io/otel/trace v1.24.0 // indirect
|
||||
go.uber.org/atomic v1.9.0 // indirect
|
||||
go.uber.org/multierr v1.9.0 // indirect
|
||||
golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect
|
||||
golang.org/x/image v0.13.0 // indirect
|
||||
golang.org/x/mod v0.14.0 // indirect
|
||||
golang.org/x/oauth2 v0.16.0 // indirect
|
||||
golang.org/x/term v0.17.0 // indirect
|
||||
golang.org/x/term v0.18.0 // indirect
|
||||
golang.org/x/tools v0.17.0 // indirect
|
||||
google.golang.org/appengine v1.6.8 // indirect
|
||||
gopkg.in/ini.v1 v1.67.0 // indirect
|
||||
|
||||
@@ -192,11 +192,11 @@ github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nos
|
||||
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
|
||||
github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa h1:RDBNVkRviHZtvDvId8XSGPu3rmpmSe+wKRcEWNgsfWU=
|
||||
github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXtdwXqoenmZCw6S+25EAm2MkxbG0deNDu4cbSA=
|
||||
github.com/gaissmai/extnetip v0.4.0 h1:9pNd/Z6QSlkda35bug/IYuPYaPMTYRuqcxPce5Z9TTQ=
|
||||
github.com/gaissmai/extnetip v0.4.0/go.mod h1:M3NWlyFKaVosQXWXKKeIPK+5VM4U85DahdIqNYX4TK4=
|
||||
github.com/getkin/kin-openapi v0.13.0/go.mod h1:WGRs2ZMM1Q8LR1QBEwUxC6RJEfaBcD0s+pcEVXFuAjw=
|
||||
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
||||
github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0=
|
||||
github.com/go-acme/lego/v4 v4.14.2 h1:/D/jqRgLi8Cbk33sLGtu2pX2jEg3bGJWHyV8kFuUHGM=
|
||||
github.com/go-acme/lego/v4 v4.14.2/go.mod h1:kBXxbeTg0x9AgaOYjPSwIeJy3Y33zTz+tMD16O4MO6c=
|
||||
github.com/go-acme/lego/v4 v4.15.0 h1:A7MHEU3b+TDFqhC/HmzMJnzPbyeaYvMZQBbqgvbThhU=
|
||||
github.com/go-acme/lego/v4 v4.15.0/go.mod h1:eeGhjW4zWT7Ccqa3sY7ayEqFLCAICx+mXgkMHKIkLxg=
|
||||
github.com/go-chi/chi v4.0.2+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ=
|
||||
@@ -204,8 +204,8 @@ github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm
|
||||
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
|
||||
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
|
||||
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
|
||||
github.com/go-jose/go-jose/v3 v3.0.1 h1:pWmKFVtt+Jl0vBZTIpz/eAKwsm6LkIxDVVbFHKkchhA=
|
||||
github.com/go-jose/go-jose/v3 v3.0.1/go.mod h1:RNkWWRld676jZEYoV3+XK8L2ZnNSvIsxFMht0mSX+u8=
|
||||
github.com/go-jose/go-jose/v3 v3.0.3 h1:fFKWeig/irsp7XD2zBxvnmA/XaRWp5V3CBsZXJF7G7k=
|
||||
github.com/go-jose/go-jose/v3 v3.0.3/go.mod h1:5b+7YgP7ZICgJDBdfjZaIt+H/9L9T/YQrVfLAMboGkQ=
|
||||
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
||||
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
||||
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
|
||||
@@ -222,6 +222,8 @@ github.com/go-openapi/analysis v0.22.2 h1:ZBmNoP2h5omLKr/srIC9bfqrUGzT6g6gNv03HE
|
||||
github.com/go-openapi/analysis v0.22.2/go.mod h1:pDF4UbZsQTo/oNuRfAWWd4dAh4yuYf//LYorPTjrpvo=
|
||||
github.com/go-openapi/errors v0.21.0 h1:FhChC/duCnfoLj1gZ0BgaBmzhJC2SL/sJr8a2vAobSY=
|
||||
github.com/go-openapi/errors v0.21.0/go.mod h1:jxNTMUxRCKj65yb/okJGEtahVd7uvWnuWfj53bse4ho=
|
||||
github.com/go-openapi/errors v0.22.0 h1:c4xY/OLxUBSTiepAg3j/MHuAv5mJhnf53LLMWFB+u/w=
|
||||
github.com/go-openapi/errors v0.22.0/go.mod h1:J3DmZScxCDufmIMsdOuDHxJbdOGC0xtUynjIx092vXE=
|
||||
github.com/go-openapi/jsonpointer v0.20.2 h1:mQc3nmndL8ZBzStEo3JYF8wzmeWffDH4VbXz58sAx6Q=
|
||||
github.com/go-openapi/jsonpointer v0.20.2/go.mod h1:bHen+N0u1KEO3YlmqOjTT9Adn1RfD91Ar825/PuiRVs=
|
||||
github.com/go-openapi/jsonreference v0.20.4 h1:bKlDxQxQJgwpUSgOENiMPzCTBVuc7vTdXSSgNeAhojU=
|
||||
@@ -232,12 +234,12 @@ github.com/go-openapi/runtime v0.27.1 h1:ae53yaOoh+fx/X5Eaq8cRmavHgDma65XPZuvBqv
|
||||
github.com/go-openapi/runtime v0.27.1/go.mod h1:fijeJEiEclyS8BRurYE1DE5TLb9/KZl6eAdbzjsrlLU=
|
||||
github.com/go-openapi/spec v0.20.14 h1:7CBlRnw+mtjFGlPDRZmAMnq35cRzI91xj03HVyUi/Do=
|
||||
github.com/go-openapi/spec v0.20.14/go.mod h1:8EOhTpBoFiask8rrgwbLC3zmJfz4zsCUueRuPM6GNkw=
|
||||
github.com/go-openapi/strfmt v0.22.0 h1:Ew9PnEYc246TwrEspvBdDHS4BVKXy/AOVsfqGDgAcaI=
|
||||
github.com/go-openapi/strfmt v0.22.0/go.mod h1:HzJ9kokGIju3/K6ap8jL+OlGAbjpSv27135Yr9OivU4=
|
||||
github.com/go-openapi/strfmt v0.22.1 h1:5Ky8cybT4576C6Ffc+8gYji/wRXCo6Ozm8RaWjPI6jc=
|
||||
github.com/go-openapi/strfmt v0.22.1/go.mod h1:OfVoytIXJasDkkGvkb1Cceb3BPyMOwk1FgmyyEw7NYg=
|
||||
github.com/go-openapi/strfmt v0.23.0 h1:nlUS6BCqcnAk0pyhi9Y+kdDVZdZMHfEKQiS4HaMgO/c=
|
||||
github.com/go-openapi/strfmt v0.23.0/go.mod h1:NrtIpfKtWIygRkKVsxh7XQMDQW5HKQl6S5ik2elW+K4=
|
||||
github.com/go-openapi/swag v0.22.9 h1:XX2DssF+mQKM2DHsbgZK74y/zj4mo9I99+89xUmuZCE=
|
||||
github.com/go-openapi/swag v0.22.9/go.mod h1:3/OXnFfnMAwBD099SwYRk7GD3xOrr1iL7d/XNLXVVwE=
|
||||
github.com/go-openapi/validate v0.22.6 h1:+NhuwcEYpWdO5Nm4bmvhGLW0rt1Fcc532Mu3wpypXfo=
|
||||
github.com/go-openapi/validate v0.22.6/go.mod h1:eaddXSqKeTg5XpSmj1dYyFTK/95n/XHwcOY+BMxKMyM=
|
||||
github.com/go-openapi/validate v0.23.0 h1:2l7PJLzCis4YUGEoW6eoQw3WhyM65WSIcjX6SQnlfDw=
|
||||
github.com/go-openapi/validate v0.23.0/go.mod h1:EeiAZ5bmpSIOJV1WLfyYF9qp/B1ZgSaEpHTJHtN5cbE=
|
||||
github.com/go-resty/resty/v2 v2.11.0 h1:i7jMfNOJYMp69lq7qozJP+bjgzfAzeOhuGlyDrqxT/8=
|
||||
@@ -285,7 +287,6 @@ github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx
|
||||
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
|
||||
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
|
||||
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
|
||||
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
||||
github.com/golangci/lint-1 v0.0.0-20181222135242-d2cdd8c08219/go.mod h1:/X8TswGSh1pIozq4ZwCfxS0WA5JGXguxk94ar/4c87Y=
|
||||
github.com/gomarkdown/markdown v0.0.0-20191123064959-2c17d62f5098/go.mod h1:aii0r/K0ZnHv7G0KF7xy1v0A7s2Ljrb5byB7MO5p6TU=
|
||||
github.com/gomarkdown/markdown v0.0.0-20230922112808-5421fefb8386 h1:EcQR3gusLHN46TAD+G+EbaaqJArt5vHhNpXAa12PQf4=
|
||||
@@ -389,8 +390,8 @@ github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO
|
||||
github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ=
|
||||
github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
|
||||
github.com/hashicorp/raft v1.1.0/go.mod h1:4Ak7FSPnuvmb0GV6vgIAJ4vYT4bek9bb6Q+7HVbyzqM=
|
||||
github.com/hashicorp/raft v1.6.0 h1:tkIAORZy2GbJ2Trp5eUSggLXDPOJLXC+JJLNMMqtgtM=
|
||||
github.com/hashicorp/raft v1.6.0/go.mod h1:Xil5pDgeGwRWuX4uPUmwa+7Vagg4N804dz6mhNi6S7o=
|
||||
github.com/hashicorp/raft v1.6.1 h1:v/jm5fcYHvVkL0akByAp+IDdDSzCNCGhdO6VdB56HIM=
|
||||
github.com/hashicorp/raft v1.6.1/go.mod h1:N1sKh6Vn47mrWvEArQgILTyng8GoDRNYlgKyK7PMjs0=
|
||||
github.com/hashicorp/raft-boltdb v0.0.0-20220329195025-15018e9b97e0 h1:CO8dBMLH6dvE1jTn/30ZZw3iuPsNfajshWoJTnVc5cc=
|
||||
github.com/hashicorp/raft-boltdb v0.0.0-20220329195025-15018e9b97e0/go.mod h1:nTakvJ4XYq45UXtn0DbwR4aU9ZdjlnIenpbs6Cd+FM0=
|
||||
github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
|
||||
@@ -404,8 +405,6 @@ github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2
|
||||
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
|
||||
github.com/influxdata/influxdb-client-go/v2 v2.2.2/go.mod h1:fa/d1lAdUHxuc1jedx30ZfNG573oQTQmUni3N6pcW+0=
|
||||
github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo=
|
||||
github.com/jedib0t/go-pretty/v6 v6.5.3 h1:GIXn6Er/anHTkVUoufs7ptEvxdD6KIhR7Axa2wYCPF0=
|
||||
github.com/jedib0t/go-pretty/v6 v6.5.3/go.mod h1:5LQIxa52oJ/DlDSLv0HEkWOFMDGoWkJb9ss5KqPpJBg=
|
||||
github.com/jedib0t/go-pretty/v6 v6.5.4 h1:gOGo0613MoqUcf0xCj+h/V3sHDaZasfv152G6/5l91s=
|
||||
github.com/jedib0t/go-pretty/v6 v6.5.4/go.mod h1:5LQIxa52oJ/DlDSLv0HEkWOFMDGoWkJb9ss5KqPpJBg=
|
||||
github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU=
|
||||
@@ -434,7 +433,6 @@ github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:C
|
||||
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
|
||||
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
|
||||
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
|
||||
github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
|
||||
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
||||
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
||||
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
|
||||
@@ -518,8 +516,6 @@ github.com/michaelquigley/pfxlog v0.6.10 h1:IbC/H3MmSDcPlQHF1UZPQU13Dkrs0+ycWRyQ
|
||||
github.com/michaelquigley/pfxlog v0.6.10/go.mod h1:gEiNTfKEX6cJHSwRpOuqBpc8oYrlhMiDK/xMk/gV7D0=
|
||||
github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4=
|
||||
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
|
||||
github.com/miekg/dns v1.1.57 h1:Jzi7ApEIzwEPLHWRcafCN9LZSBbqQpxjt/wpgvg7wcM=
|
||||
github.com/miekg/dns v1.1.57/go.mod h1:uqRjCRUuEAA6qsOiJvDd+CFo/vW+y5WR6SNmHE55hZk=
|
||||
github.com/miekg/dns v1.1.58 h1:ca2Hdkz+cDg/7eNF6V56jjzuZ4aCAE+DbVkILdQWG/4=
|
||||
github.com/miekg/dns v1.1.58/go.mod h1:Ypv+3b/KadlvW9vJfXOTf300O4UqaHFzFCuHz+rPkBY=
|
||||
github.com/miekg/pkcs11 v1.1.1 h1:Ugu9pdy6vAYku5DEpVWVFPYnzV+bxB+iRdbuFSu7TvU=
|
||||
@@ -541,7 +537,6 @@ github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJ
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
|
||||
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
|
||||
github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
|
||||
github.com/muhlemmer/gu v0.3.1 h1:7EAqmFrW7n3hETvuAdmFmn4hS8W+z3LgKtrnow+YzNM=
|
||||
github.com/muhlemmer/gu v0.3.1/go.mod h1:YHtHR+gxM+bKEIIs7Hmi9sPT3ZDUvTN/i88wQpZkrdM=
|
||||
github.com/muhlemmer/httpforwarded v0.1.0 h1:x4DLrzXdliq8mprgUMR0olDvHGkou5BJsK/vWUetyzY=
|
||||
@@ -577,8 +572,8 @@ github.com/openziti/channel/v2 v2.0.119 h1:stfSrnDqoTi78LMvQA3+NSivHjQnRrYKrgij5
|
||||
github.com/openziti/channel/v2 v2.0.119/go.mod h1:lSRJwqmbkE34DgXYEmUhVCzwcQcx65vZGE8nuBNK458=
|
||||
github.com/openziti/dilithium v0.3.3 h1:PLgQ6PMNLSTzCFbX/h98cmudgz/cU6TmjdSv5NAPD8k=
|
||||
github.com/openziti/dilithium v0.3.3/go.mod h1:vsCjI2AU/hon9e+dLhUFbCNGesJDj2ASgkySOcpmvjo=
|
||||
github.com/openziti/edge-api v0.26.10 h1:LEDuJHZsExi0PBVO9iVuIdZWJ7eFo/i4TJhXoSFmfOU=
|
||||
github.com/openziti/edge-api v0.26.10/go.mod h1:FQLjav9AfqxQYSL0xKPDZ/JWTSZXApkk7jM2/iczGXM=
|
||||
github.com/openziti/edge-api v0.26.12 h1:5VRz0cWtfQq2rhSA7Ne6amM7YNI6pQGRfNgbKt0g6kQ=
|
||||
github.com/openziti/edge-api v0.26.12/go.mod h1:tKZRUFDB9zM5J1zBS0ok2r40OhJqWykZaU9HSBQgr8w=
|
||||
github.com/openziti/foundation/v2 v2.0.37 h1:7pa4vWrlwllEoLXaK2rx91AffLQJ8k5pvc92oWANavA=
|
||||
github.com/openziti/foundation/v2 v2.0.37/go.mod h1:2NxzCnJbMw35U9RrFcdEaiXdxIMfBHOUNPngpyhvKeY=
|
||||
github.com/openziti/identity v1.0.70 h1:JNwtJHmIS0DcXookm2xuXyh4z92T1O21GQvuO8PmHWs=
|
||||
@@ -683,6 +678,8 @@ github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg
|
||||
github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
|
||||
github.com/shirou/gopsutil/v3 v3.24.1 h1:R3t6ondCEvmARp3wxODhXMTLC/klMa87h2PHUw5m7QI=
|
||||
github.com/shirou/gopsutil/v3 v3.24.1/go.mod h1:UU7a2MSBQa+kW1uuDq8DeEBS8kmrnQwsv2b5O513rwU=
|
||||
github.com/shirou/gopsutil/v3 v3.24.2 h1:kcR0erMbLg5/3LcInpw0X/rrPSqq4CDPyI6A6ZRC18Y=
|
||||
github.com/shirou/gopsutil/v3 v3.24.2/go.mod h1:tSg/594BcA+8UdQU2XcW803GWYgdtauFFPgJCJKZlVk=
|
||||
github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM=
|
||||
github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ=
|
||||
github.com/shoenig/test v0.6.4 h1:kVTaSd7WLz5WZ2IaoM0RSzRsUD+m8wRR+5qvntpn4LU=
|
||||
@@ -753,9 +750,10 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
|
||||
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
|
||||
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
|
||||
github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c=
|
||||
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
|
||||
github.com/stretchr/objx v0.5.1 h1:4VhoImhV/Bm0ToFkXFi8hXNXwpDRZ/ynw3amt82mzq0=
|
||||
github.com/stretchr/objx v0.5.1/go.mod h1:/iHQpkQwBD6DLUmQ4pE+s1TXdob1mORJ4/UFdrifcy0=
|
||||
github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
|
||||
github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
||||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||
@@ -768,6 +766,8 @@ github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1F
|
||||
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
||||
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
|
||||
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
||||
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
|
||||
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
||||
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
|
||||
github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
|
||||
github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
|
||||
@@ -788,9 +788,6 @@ github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQ
|
||||
github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ=
|
||||
github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU=
|
||||
github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM=
|
||||
github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI=
|
||||
github.com/xdg-go/scram v1.1.2/go.mod h1:RT/sEzTbU5y00aCK8UOx6R7YryM0iF1N2MOmC3kKLN4=
|
||||
github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gijq1dTyGkM=
|
||||
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c=
|
||||
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
|
||||
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0=
|
||||
@@ -798,7 +795,6 @@ github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:
|
||||
github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74=
|
||||
github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y=
|
||||
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
|
||||
github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA=
|
||||
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
@@ -807,16 +803,18 @@ github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1
|
||||
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||
github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw=
|
||||
github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
|
||||
github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0=
|
||||
github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
|
||||
github.com/zitadel/oidc/v2 v2.12.0 h1:4aMTAy99/4pqNwrawEyJqhRb3yY3PtcDxnoDSryhpn4=
|
||||
github.com/zitadel/oidc/v2 v2.12.0/go.mod h1:LrRav74IiThHGapQgCHZOUNtnqJG0tcZKHro/91rtLw=
|
||||
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
|
||||
go.etcd.io/bbolt v1.3.8 h1:xs88BrvEv273UsB79e0hcVrlUWmS0a8upikMFhSyAtA=
|
||||
go.etcd.io/bbolt v1.3.8/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw=
|
||||
go.etcd.io/bbolt v1.3.9 h1:8x7aARPEXiXbHmtUwAIv7eV2fQFHrLLavdiJ3uzJXoI=
|
||||
go.etcd.io/bbolt v1.3.9/go.mod h1:zaO32+Ti0PK1ivdPtgMESzuzL2VPoIG1PCQNvOdo/dE=
|
||||
go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs=
|
||||
go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g=
|
||||
go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ=
|
||||
go.mongodb.org/mongo-driver v1.13.1 h1:YIc7HTYsKndGK4RFzJ3covLz1byri52x0IoMB0Pt/vk=
|
||||
go.mongodb.org/mongo-driver v1.13.1/go.mod h1:wcDf1JBCXy2mOW0bWHwO/IOYqdca1MPCwDtFu/Z9+eo=
|
||||
go.mongodb.org/mongo-driver v1.14.0 h1:P98w8egYRjYe3XDjxhYJagTokP/H6HzlsnojRgZRd80=
|
||||
go.mongodb.org/mongo-driver v1.14.0/go.mod h1:Vzb0Mk/pa7e6cWw85R4F/endUC3u0U9jGcNU603k65c=
|
||||
go.mozilla.org/pkcs7 v0.0.0-20210826202110-33d05740a352 h1:CCriYyAfq1Br1aIYettdHZTy8mBTIPo7We18TuO/bak=
|
||||
go.mozilla.org/pkcs7 v0.0.0-20210826202110-33d05740a352/go.mod h1:SNgMg+EgDFwmvSmLRTNKC5fegJjB7v23qTQ0XLGUNHk=
|
||||
go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA=
|
||||
@@ -827,14 +825,14 @@ go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
|
||||
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
|
||||
go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
|
||||
go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E=
|
||||
go.opentelemetry.io/otel v1.21.0 h1:hzLeKBZEL7Okw2mGzZ0cc4k/A7Fta0uoPgaJCr8fsFc=
|
||||
go.opentelemetry.io/otel v1.21.0/go.mod h1:QZzNPQPm1zLX4gZK4cMi+71eaorMSGT3A4znnUvNNEo=
|
||||
go.opentelemetry.io/otel/metric v1.21.0 h1:tlYWfeo+Bocx5kLEloTjbcDwBuELRrIFxwdQ36PlJu4=
|
||||
go.opentelemetry.io/otel/metric v1.21.0/go.mod h1:o1p3CA8nNHW8j5yuQLdc1eeqEaPfzug24uvsyIEJRWM=
|
||||
go.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo=
|
||||
go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo=
|
||||
go.opentelemetry.io/otel/metric v1.24.0 h1:6EhoGWWK28x1fbpA4tYTOWBkPefTDQnb8WSGXlc88kI=
|
||||
go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco=
|
||||
go.opentelemetry.io/otel/sdk v1.17.0 h1:FLN2X66Ke/k5Sg3V623Q7h7nt3cHXaW1FOvKKrW0IpE=
|
||||
go.opentelemetry.io/otel/sdk v1.17.0/go.mod h1:U87sE0f5vQB7hwUoW98pW5Rz4ZDuCFBZFNUBlSgmDFQ=
|
||||
go.opentelemetry.io/otel/trace v1.21.0 h1:WD9i5gzvoUPuXIXH24ZNBudiarZDKuekPqi/E8fpfLc=
|
||||
go.opentelemetry.io/otel/trace v1.21.0/go.mod h1:LGbsEB0f9LGjN+OZaQQ26sohbOmiMR+BaslueVtS/qQ=
|
||||
go.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y1YELI=
|
||||
go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU=
|
||||
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
||||
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
|
||||
go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE=
|
||||
@@ -862,20 +860,17 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U
|
||||
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20191112222119-e1110fd1c708/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||
golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw=
|
||||
golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
|
||||
golang.org/x/crypto v0.18.0 h1:PGVlW0xEltQnzFZ55hkuX5+KLyrMYhHld1YHO4AKcdc=
|
||||
golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg=
|
||||
golang.org/x/crypto v0.19.0 h1:ENy+Az/9Y1vSrlrvBSyna3PITt4tiZLf7sgCjZBX7Wo=
|
||||
golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
|
||||
golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA=
|
||||
golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs=
|
||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
|
||||
@@ -969,14 +964,11 @@ golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v
|
||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||
golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc=
|
||||
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
|
||||
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||
golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco=
|
||||
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
|
||||
golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
|
||||
golang.org/x/net v0.20.0 h1:aCL9BSgETF1k+blQaYUBx9hJ9LOGP3gAVemcZlf1Kpo=
|
||||
golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY=
|
||||
golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4=
|
||||
golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
|
||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||
@@ -1075,7 +1067,6 @@ golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7w
|
||||
golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
@@ -1092,16 +1083,18 @@ golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y=
|
||||
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
|
||||
golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||
golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
||||
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
|
||||
golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U=
|
||||
golang.org/x/term v0.17.0 h1:mkTF7LCd6WGJNL3K1Ad7kwxNfYAW6a8a8QqtMblp/4U=
|
||||
golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
|
||||
golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8=
|
||||
golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58=
|
||||
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
@@ -1109,7 +1102,6 @@ golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
|
||||
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||
@@ -1182,8 +1174,6 @@ golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
|
||||
golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
||||
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
|
||||
golang.org/x/tools v0.16.0 h1:GO788SKMRunPIBCXiQyo2AaexLstOrVhuAL5YwsckQM=
|
||||
golang.org/x/tools v0.16.0/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0=
|
||||
golang.org/x/tools v0.17.0 h1:FvmRgNOcs3kOa+T20R1uhfP9F6HgG2mfxDv1vrx1Htc=
|
||||
golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps=
|
||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
# required until ziti 0.32.0
|
||||
ZITI_QUICK_TAG=release-next
|
||||
# optionally set the ziti CLI version to use, e.g., 0.32.0
|
||||
ZITI_QUICK_TAG=latest
|
||||
@@ -1,5 +1,8 @@
|
||||
# use a more recent debian image so it can run the ziti binary built with the Docker host's glibc
|
||||
FROM debian:bookworm-slim
|
||||
|
||||
COPY ./build/ziti /usr/local/bin/
|
||||
ARG ARTIFACTS_DIR=./build
|
||||
|
||||
COPY ${ARTIFACTS_DIR}/ziti /usr/local/bin/
|
||||
|
||||
CMD ["ziti"]
|
||||
|
||||
@@ -1,28 +1,33 @@
|
||||
# minimal Ziti Docker quickstart
|
||||
# All-in-one Ziti Docker quickstart
|
||||
|
||||
This Docker Compose project runs `ziti edge quickstart` in a container while persisting configs, PKI, database, etc. in the same directory `./persistent/`.
|
||||
This Docker Compose project runs `ziti edge quickstart` in a container while persisting configs, PKI, database, etc. in
|
||||
a Docker named volume. You may instead persist the state in a filesystem directory on the Docker host by setting env var
|
||||
`ZITI_HOME` to the directory's path.
|
||||
|
||||
## Run Ziti
|
||||
|
||||
This is the primary use case for this project: running the `ziti edge quickstart` command in the official
|
||||
`openziti/ziti-cli` container image.
|
||||
|
||||
1. In this "minimal" sub-directory, pull the container images.
|
||||
1. In this "all-in-one" sub-directory, pull the container images. This makes the latest official release image available
|
||||
locally.
|
||||
|
||||
```bash
|
||||
docker compose pull
|
||||
```
|
||||
|
||||
2. Run the project.
|
||||
2. Run the project and store the PKI, DB, and YAML configs in a sub-directory.
|
||||
|
||||
```bash
|
||||
docker compose up --detach
|
||||
ZITI_HOME=./quickstart docker compose up
|
||||
```
|
||||
|
||||
3. Modify the state in `./persistent/`, and bounce the container.
|
||||
3. Modify configuration and bounce the container.
|
||||
|
||||
Modify the configs in the `./quickstart/` sub-directory adjacent to the `compose.yml` file.
|
||||
|
||||
```bash
|
||||
docker compose up --force-recreate --detach
|
||||
docker compose up --force-recreate
|
||||
```
|
||||
|
||||
4. Observe the logs
|
||||
@@ -50,7 +55,7 @@ This is the primary use case for this project: running the `ziti edge quickstart
|
||||
## Develop Ziti
|
||||
|
||||
This is a secondary use case for this Docker Compose project that replaces the `ziti` binary in the container image with
|
||||
the one you build locally with `go build` before running the `ziti edge quickstart` command.
|
||||
the one you build locally with `go build`.
|
||||
|
||||
1. In the top-level directory of the `ziti` project, build the binary.
|
||||
|
||||
@@ -58,65 +63,64 @@ the one you build locally with `go build` before running the `ziti edge quicksta
|
||||
go build -o ./build ./...
|
||||
```
|
||||
|
||||
The build command can also be run from this "minimal" sub-directory.
|
||||
The build command can also be run from this "all-in-one" sub-directory.
|
||||
|
||||
```bash
|
||||
go build -o ../../../build ../../../...
|
||||
```
|
||||
|
||||
2. In the "minimal" sub-directory, with `Dockerfile` present:
|
||||
2. In the "all-in-one" sub-directory, with `Dockerfile` present:
|
||||
|
||||
```bash
|
||||
docker compose up --detach --build
|
||||
ZITI_QUICK_TAG=local docker compose up --build
|
||||
```
|
||||
|
||||
By adding this `--build` option to the `up` command, the container image is built from the Dockerfile with your
|
||||
locally built `ziti` binary instead of pulling the default `openziti/ziti-cli` container image from Docker Hub. In
|
||||
the `compose.yml`, the Docker build context is defined with environment variable `ZITI_SRC_ROOT` which defaults to
|
||||
`../../../` (three levels up from this directory at the top level of a Git working copy of the source repo).
|
||||
the `compose.yml`, the Docker build context is hard-coded to `../../../` (three levels up from this directory at the
|
||||
top level of a Git working copy of the source repo). Setting `ZITI_QUICK_TAG=local` tags the locally-built container
|
||||
image differently from the official release image's `:latest` tag so you can tell them apart.
|
||||
|
||||
### Troubleshooting
|
||||
|
||||
#### Changing File Locations
|
||||
|
||||
The Compose project file `compose.yml` and `Dockerfile` have file paths that represent the assumption they're placed in
|
||||
a sub-directory three levels deep in a checked-out copy of the `openziti/ziti` source repository. This allows the Dockerfile
|
||||
to copy the built binary from the top-level directory `./build`. You can move these files outside the source tree if you
|
||||
adjust the paths in both files.
|
||||
a sub-directory three levels deep in a checked-out copy of the `openziti/ziti` source repository. This allows the
|
||||
Dockerfile to copy the built binary from the top-level directory `./build`. You may set the environment variable
|
||||
`ARTIFACTS_DIR` to a different path relative to the build context (top-level directory of the source repo) to change the
|
||||
location where the container image build looks for the locally-built `ziti` binary.
|
||||
|
||||
#### Building `ziti` in the Dockerfile
|
||||
#### Building `ziti` in Docker
|
||||
|
||||
If the binary you build on your host doesn't run in the container due to an environment issue, such as a GLIBC version
|
||||
mismatch, you have the option to build `ziti` in the container every time you run `up --build`.
|
||||
If the binary you build on the Docker host doesn't run in the container due to an environment issue, such as a GLIBC
|
||||
version mismatch, you have the option to build `ziti` in the container every time you run
|
||||
`ZITI_QUICK_TAG=local docker compose up --build`.
|
||||
|
||||
Change `Dockerfile` like this, and run `docker compose up --detach --build` to build the checked-out source tree and run
|
||||
the quickstart with the build.
|
||||
Change `Dockerfile` like this, and run `ZITI_QUICK_TAG=local docker compose up --build` to build the
|
||||
checked-out source tree and run the quickstart with the build.
|
||||
|
||||
```dockerfile
|
||||
FROM golang:1.20-bookworm AS builder
|
||||
FROM golang:1.21-bookworm AS builder
|
||||
ARG ARTIFACTS_DIR=./build
|
||||
WORKDIR /app
|
||||
COPY go.mod go.sum ./
|
||||
RUN go mod download
|
||||
COPY . .
|
||||
RUN go build -o ./build/ ./...
|
||||
RUN go build -o /app/${ARTIFACTS_DIR} ./...
|
||||
|
||||
FROM debian:bookworm-slim
|
||||
COPY --from=builder /app/build/ziti /usr/local/bin/
|
||||
COPY --from=builder /app/${ARTIFACTS_DIR} /usr/local/bin/
|
||||
|
||||
CMD ["ziti"]
|
||||
```
|
||||
|
||||
#### Gotcha - Clobbering the Container Image
|
||||
#### Gotcha - Not Clobbering the Downloaded Container Image
|
||||
|
||||
With `docker compose up --build`, the container image specified in `image` is replaced with the one built from the Dockerfile.
|
||||
This clobbers any image you may have pulled from the registry unless you change the value of `image` or comment the line.
|
||||
With `docker compose up --build`, the downloaded container image specified in `image` is replaced locally with the one
|
||||
built from the Dockerfile. This clobbers any image you may have pulled from the registry, which can lead to confusion.
|
||||
You can prevent this by setting environment variable like `ZITI_QUICK_TAG=local docker compose up --build` to avoid
|
||||
clobbering the default `:latest` tag.
|
||||
|
||||
```yaml
|
||||
# commenting "image" avoids clobbering the image pulled from the registry
|
||||
# image: ${ZITI_QUICK_IMAGE:-docker.io/openziti/ziti-cli}:${ZITI_QUICK_TAG:-latest}
|
||||
build:
|
||||
context: ${ZITI_SRC_ROOT:-../../../}
|
||||
dockerfile: ./quickstart/docker/minimal/Dockerfile
|
||||
```
|
||||
|
||||
Next time you run `docker compose pull` the image from the registry will be refreshed in the local cache.
|
||||
If you already clobbered `:latest` just run `ZITI_QUICK_TAG=latest docker compose pull` to refresh your local copy from
|
||||
the registry.
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
services:
|
||||
quickstart-test:
|
||||
profiles:
|
||||
- test
|
||||
depends_on:
|
||||
wait-for-login:
|
||||
condition: service_completed_successfully
|
||||
image: golang:${ZITI_GO_VERSION:-noop}-alpine
|
||||
networks:
|
||||
- quickstart
|
||||
# run as the same user as the host, so we can use the host's GOCACHE
|
||||
user: ${ZIGGY_UID:-1000}
|
||||
volumes:
|
||||
# mount the parent dir of the quickstart, which is the top-level of the ziti repo working copy, as /mnt, so we can
|
||||
# run the tests in the "edge" Go package
|
||||
- ../../../:/mnt
|
||||
# re-run tests if significant changes from last result in GOCACHE
|
||||
- ${GOCACHE:-${HOME}/.cache/go-build}:/.cache/go-build
|
||||
# re-download dep packages if significant changes from last download in GOPATH
|
||||
- ${GOPATH:-${HOME}/go}:/go
|
||||
working_dir: /mnt
|
||||
environment:
|
||||
# verbose, tests tagged 'quickstart && manual', manual means test an existing network, don't run a network inside
|
||||
# the test process
|
||||
GOFLAGS: "-tags=quickstart,manual"
|
||||
GOCACHE: /.cache/go-build
|
||||
GOPATH: /go
|
||||
ZITI_PWD:
|
||||
ZITI_CTRL_EDGE_ADVERTISED_ADDRESS: ${EXTERNAL_DNS:-quickstart}
|
||||
ZITI_ROUTER_ADVERTISED_ADDRESS: ${EXTERNAL_DNS:-quickstart}
|
||||
ZITI_CTRL_EDGE_ADVERTISED_PORT:
|
||||
ZITI_ROUTER_NAME: ${ZITI_ROUTER_NAME:-quickstart-router}
|
||||
ZITI_ROUTER_PORT:
|
||||
command: go test -v ./ziti/cmd/edge/...
|
||||
|
||||
wait-for-login:
|
||||
profiles:
|
||||
- test
|
||||
image: ${ZITI_QUICK_IMAGE:-docker.io/openziti/ziti-cli}:${ZITI_QUICK_TAG:-latest}
|
||||
networks:
|
||||
- quickstart
|
||||
volumes:
|
||||
- ${ZITI_HOME:-ziti_home}:/home/ziggy
|
||||
entrypoint:
|
||||
- bash
|
||||
- -euxc
|
||||
- |
|
||||
set -o pipefail
|
||||
ATTEMPTS=10
|
||||
DELAY=3
|
||||
until !((ATTEMPTS)) || ziti $${@} &>/dev/null; do
|
||||
(( ATTEMPTS-- ))
|
||||
echo "Waiting for controller to start"
|
||||
sleep $${DELAY}
|
||||
done
|
||||
ziti $${@}
|
||||
command: >
|
||||
-- edge login
|
||||
${EXTERNAL_DNS:-quickstart}:${ZITI_CTRL_EDGE_ADVERTISED_PORT:-1280}
|
||||
-u ${ZITI_USER:-admin} -p ${ZITI_PWD:-admin}
|
||||
--ca /home/ziggy/quickstart/pki/root-ca/certs/root-ca.cert
|
||||
@@ -3,9 +3,13 @@ services:
|
||||
image: ${ZITI_QUICK_IMAGE:-docker.io/openziti/ziti-cli}:${ZITI_QUICK_TAG:-latest}
|
||||
restart: unless-stopped
|
||||
build:
|
||||
context: ${ZITI_SRC_ROOT:-../../../}
|
||||
# the build context is the root of the ziti repo so that BuildKit can access the built ziti executable in /build
|
||||
# and the Dockerfile
|
||||
context: ../../../
|
||||
dockerfile: ./quickstart/docker/all-in-one/Dockerfile
|
||||
args: {}
|
||||
args:
|
||||
# path of the directory containing the locally-built ziti executable; relative to the build context
|
||||
ARTIFACTS_DIR: ./build
|
||||
networks:
|
||||
quickstart:
|
||||
# this allows other containers to use the same external DNS name to reach the quickstart container from within the
|
||||
@@ -13,47 +17,43 @@ services:
|
||||
aliases:
|
||||
- ${EXTERNAL_DNS:-null}
|
||||
entrypoint:
|
||||
- bash
|
||||
- -euc
|
||||
- |
|
||||
ZITI_CMD+=" --ctrl-address ${EXTERNAL_DNS:-127.0.0.1}"\
|
||||
" --ctrl-port ${ZITI_CTRL_EDGE_ADVERTISED_PORT:-1280}"\
|
||||
" --router-address ${EXTERNAL_DNS:-127.0.0.1}"\
|
||||
" --router-port ${ZITI_ROUTER_PORT:-3022}"\
|
||||
" --password ${ZITI_PWD:-admin}"
|
||||
echo "DEBUG: run command is: ziti $${@} $${ZITI_CMD}"
|
||||
exec ziti "$${@}" $${ZITI_CMD}
|
||||
command: -- edge quickstart --home /persistent
|
||||
- bash
|
||||
- -euc
|
||||
- |
|
||||
ZITI_CMD+=" --ctrl-address ${EXTERNAL_DNS:-quickstart}"\
|
||||
" --ctrl-port ${ZITI_CTRL_EDGE_ADVERTISED_PORT:-1280}"\
|
||||
" --router-address ${EXTERNAL_DNS:-quickstart}"\
|
||||
" --router-port ${ZITI_ROUTER_PORT:-3022}"\
|
||||
" --password ${ZITI_PWD:-admin}"
|
||||
echo "DEBUG: run command is: ziti $${@} $${ZITI_CMD}"
|
||||
exec ziti "$${@}" $${ZITI_CMD}
|
||||
command: -- edge quickstart --home /home/ziggy/quickstart
|
||||
user: ${ZIGGY_UID:-1000}
|
||||
environment:
|
||||
HOME: /persistent
|
||||
HOME: /home/ziggy
|
||||
PFXLOG_NO_JSON: "${PFXLOG_NO_JSON:-true}"
|
||||
volumes:
|
||||
# store the quickstart state in a named volume; "initialize" service's mount must remain aligned to set the owner on
|
||||
# "up"
|
||||
- persistent:/persistent
|
||||
# store the quickstart state on the Docker host in the same directory as this compose.yml file
|
||||
# - ./persistent:/persistent
|
||||
# store the quickstart state in a named volume "ziti_home" or store the quickstart state on the Docker host in a
|
||||
# directory, ZITI_HOME
|
||||
- ${ZITI_HOME:-ziti_home}:/home/ziggy
|
||||
ports:
|
||||
- ${ZITI_INTERFACE:-0.0.0.0}:${ZITI_CTRL_EDGE_ADVERTISED_PORT:-1280}:${ZITI_CTRL_EDGE_ADVERTISED_PORT:-1280}
|
||||
- ${ZITI_INTERFACE:-0.0.0.0}:${ZITI_ROUTER_PORT:-3022}:${ZITI_ROUTER_PORT:-3022}
|
||||
- ${ZITI_INTERFACE:-0.0.0.0}:${ZITI_CTRL_EDGE_ADVERTISED_PORT:-1280}:${ZITI_CTRL_EDGE_ADVERTISED_PORT:-1280}
|
||||
- ${ZITI_INTERFACE:-0.0.0.0}:${ZITI_ROUTER_PORT:-3022}:${ZITI_ROUTER_PORT:-3022}
|
||||
depends_on:
|
||||
initialize:
|
||||
condition: service_completed_successfully
|
||||
# this service is used to initialize the persistent volume by setting the owner to the UID of the user running the
|
||||
# this service is used to initialize the ziti_home volume by setting the owner to the UID of the user running the
|
||||
# quickstart container
|
||||
initialize:
|
||||
image: busybox
|
||||
command: chown -Rc ${ZIGGY_UID:-1000} /persistent
|
||||
command: chown -Rc ${ZIGGY_UID:-1000} /home/ziggy
|
||||
user: root
|
||||
environment:
|
||||
HOME: /persistent
|
||||
# PFXLOG_NO_JSON: "true"
|
||||
HOME: /home/ziggy
|
||||
volumes:
|
||||
# store the quickstart state in a named volume; this mount must align with the "quickstart" service's mount
|
||||
- persistent:/persistent
|
||||
# store the quickstart state on the Docker host in the same directory as this compose.yml file
|
||||
# - ./persistent:/persistent
|
||||
# store the quickstart state in a named volume "ziti_home" or store the quickstart state on the Docker host in a
|
||||
# directory, ZITI_HOME
|
||||
- ${ZITI_HOME:-ziti_home}:/home/ziggy
|
||||
|
||||
# define a custom network so that we can also define a DNS alias for the quickstart container
|
||||
networks:
|
||||
@@ -62,5 +62,5 @@ networks:
|
||||
|
||||
volumes:
|
||||
# this will not be used if you switch from named volume to bind mount volume
|
||||
persistent:
|
||||
ziti_home:
|
||||
driver: local
|
||||
@@ -1,4 +1,3 @@
|
||||
version: '2.4'
|
||||
services:
|
||||
ziti-controller:
|
||||
image: "${ZITI_IMAGE}:${ZITI_VERSION}"
|
||||
|
||||
@@ -4,7 +4,6 @@ FROM ubuntu:rolling as fetch-ziti-bins
|
||||
ARG ZITI_VERSION_OVERRIDE
|
||||
ARG DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
COPY . /docker.build.context
|
||||
RUN apt-get update \
|
||||
&& apt-get --yes install \
|
||||
jq \
|
||||
@@ -19,6 +18,7 @@ RUN apt-get update \
|
||||
# just build the Dockerfile \
|
||||
# to use a specific version of ziti, specify ZITI_VERSION_OVERRIDE then \
|
||||
# build the Dockerfile
|
||||
COPY . /docker.build.context
|
||||
RUN bash /docker.build.context/fetch-ziti-bins.sh /ziti-bin
|
||||
|
||||
FROM ubuntu:rolling
|
||||
|
||||
@@ -60,4 +60,4 @@ unset ZITI_PWD
|
||||
# create a place for the internal db
|
||||
mkdir -p $ZITI_HOME/db
|
||||
|
||||
"${ZITI_BIN_DIR}/ziti" controller run "${ZITI_HOME}/${ZITI_CTRL_NAME}.yaml"
|
||||
"${ZITI_BIN_DIR}/ziti" controller run ${ZITI_VERBOSE:+--verbose} "${ZITI_HOME}/${ZITI_CTRL_NAME}.yaml"
|
||||
|
||||
@@ -72,5 +72,5 @@ fi
|
||||
unset ZITI_USER
|
||||
unset ZITI_PWD
|
||||
|
||||
"${ZITI_BIN_DIR}/ziti" router run "${ZITI_HOME}/${ZITI_ROUTER_NAME}.yaml" > "${ZITI_HOME}/${ZITI_ROUTER_NAME}.log"
|
||||
"${ZITI_BIN_DIR}/ziti" router run "${ZITI_HOME}/${ZITI_ROUTER_NAME}.yaml"
|
||||
|
||||
|
||||
@@ -40,12 +40,12 @@ function _wait_for_controller {
|
||||
}
|
||||
|
||||
function _wait_for_public_router {
|
||||
local advertised_host_port="${ZITI_ROUTER_NAME}:${ZITI_ROUTER_PORT}"
|
||||
local advertised_host_port="${ZITI_ROUTER_ADVERTISED_ADDRESS}:${ZITI_ROUTER_PORT}"
|
||||
local COUNTDOWN=10
|
||||
until [[ -s "${ZITI_HOME}/${ZITI_ROUTER_NAME}.cert" ]] \
|
||||
&& openssl s_client \
|
||||
-connect "${advertised_host_port}" \
|
||||
-servername "${ZITI_ROUTER_NAME}" \
|
||||
-servername "${ZITI_ROUTER_ADVERTISED_ADDRESS}" \
|
||||
-alpn "ziti-edge,h2,http/1.1" \
|
||||
-cert "${ZITI_HOME}/${ZITI_ROUTER_NAME}.cert" \
|
||||
-key "${ZITI_HOME}/${ZITI_ROUTER_NAME}.key" \
|
||||
|
||||
@@ -2,7 +2,7 @@ services:
|
||||
ziti-controller:
|
||||
image: "${ZITI_IMAGE}:${ZITI_VERSION}"
|
||||
healthcheck:
|
||||
test: curl -m 1 -s -k https://${ZITI_CTRL_EDGE_ADVERTISED_ADDRESS:-ziti-edge-controller}:${ZITI_CTRL_EDGE_ADVERTISED_PORT:-1280}/edge/client/v1/version
|
||||
test: curl -m 1 -s -k -f https://${ZITI_CTRL_EDGE_ADVERTISED_ADDRESS:-ziti-edge-controller}:${ZITI_CTRL_EDGE_ADVERTISED_PORT:-1280}/edge/client/v1/version
|
||||
interval: 1s
|
||||
timeout: 3s
|
||||
retries: 30
|
||||
|
||||
@@ -795,6 +795,7 @@ main(){
|
||||
}
|
||||
helmWrapper upgrade --install "ziti-controller" "${ZITI_CHARTS_REF}/ziti-controller" \
|
||||
--namespace "${ZITI_NAMESPACE}" --create-namespace \
|
||||
--set ctrlPlane.advertisedHost="miniziti-controller-ctrl.${MINIZITI_INGRESS_ZONE}" \
|
||||
--set clientApi.advertisedHost="miniziti-controller.${MINIZITI_INGRESS_ZONE}" \
|
||||
--set trust-manager.app.trust.namespace="${ZITI_NAMESPACE}" \
|
||||
--set trust-manager.enabled=true \
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#!/usr/bin/env zsh
|
||||
#!/usr/bin/env zsh
|
||||
#
|
||||
# this script tests the quickstart's ziti-cli-functions.sh, container image creation process, and Compose project by
|
||||
# gathering files from a particular GitHub repo ref or a filesystem path and running the quickstart's Go test suite
|
||||
@@ -39,9 +39,9 @@ TESTDIR="$(mktemp -d -t "${BASENAME%.*}.${DATESTAMP}.XXX")"
|
||||
if [[ -z "${ZITI_QUICK_DIR:-}" ]]; then
|
||||
ZITI_QUICK_DIR="$(realpath "${DIRNAME}/..")"
|
||||
fi
|
||||
# if unset, set ZITI_QUICK_IMAGE_TAG to this run's dirname
|
||||
if [[ -z "${ZITI_QUICK_IMAGE_TAG:-}" ]]; then
|
||||
ZITI_QUICK_IMAGE_TAG=$(basename "${TESTDIR}")
|
||||
# if unset, set ZITI_QUICK_TAG to this run's dirname
|
||||
if [[ -z "${ZITI_QUICK_TAG:-}" ]]; then
|
||||
ZITI_QUICK_TAG=$(basename "${TESTDIR}")
|
||||
fi
|
||||
|
||||
# case "${1:-}" in
|
||||
@@ -68,35 +68,43 @@ if [[ -n "${ZITI_QUICK_DIR:-}" ]]; then
|
||||
for FILE in "${QUICK_FILES[@]}"; do
|
||||
cp "${ZITI_QUICK_DIR}/${FILE}" .
|
||||
done
|
||||
if [[ -n "${ZITI_QUICK_IMAGE_TAG:-}" ]]; then
|
||||
if [[ -n "${ZITI_QUICK_TAG:-}" ]]; then
|
||||
if [[ -x "${ZITI_QUICK_DIR:-}/docker/createLocalImage.sh" ]]; then
|
||||
(
|
||||
cd "${ZITI_QUICK_DIR}/docker"
|
||||
unset ZITI_VERSION ZITI_OVERRIDE_VERSION # always build the local source
|
||||
./createLocalImage.sh --build "${ZITI_QUICK_IMAGE_TAG}"
|
||||
./createLocalImage.sh --build "${ZITI_QUICK_TAG}"
|
||||
)
|
||||
else
|
||||
echo "ERROR: ZITI_QUICK_IMAGE_TAG is set but ZITI_QUICK_DIR/docker/createLocalImage.sh is not executable" >&2
|
||||
echo "ERROR: ZITI_QUICK_TAG is set but ZITI_QUICK_DIR/docker/createLocalImage.sh is not executable" >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
elif [[ -n "${ZITI_QUICK_IMAGE_TAG:-}" ]]; then
|
||||
echo "ERROR: ZITI_QUICK_IMAGE_TAG is set but ZITI_QUICK_DIR is not set" >&2
|
||||
elif [[ -n "${ZITI_QUICK_TAG:-}" ]]; then
|
||||
echo "ERROR: ZITI_QUICK_TAG is set but ZITI_QUICK_DIR is not set" >&2
|
||||
exit 1
|
||||
else
|
||||
echo "ERROR: ZITI_QUICK_IMAGE_TAG is not set, try running with --local" >&2
|
||||
echo "ERROR: ZITI_QUICK_TAG is not set, try running with --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# rename the simplified Compose file to the default Compose project file name
|
||||
mv ./simplified-docker-compose.yml ./compose.yml
|
||||
|
||||
# learn the expected Go version from the Go mod file so we can pull the correct container image
|
||||
ZITI_GO_VERSION="$(awk '/^go[[:space:]]+/ {print $2}' ./go.mod)"
|
||||
if [[ -n "${ZITI_GO_VERSION:-}" ]]; then
|
||||
echo "INFO: Using Go version from environment variable ZITI_GO_VERSION=${ZITI_GO_VERSION}"
|
||||
else
|
||||
# learn the expected Go version from the Go mod file so we can pull the correct container image
|
||||
ZITI_GO_VERSION="$(awk '/^go[[:space:]]+/ {print $2}' ./go.mod)"
|
||||
echo "INFO: Using Go version from go.mod: ${ZITI_GO_VERSION}"
|
||||
fi
|
||||
|
||||
# make this var available in the Compose project
|
||||
sed -E \
|
||||
-e "s/^(#[[:space:]]+)?(ZITI_PWD)=.*/\2=${ZITI_PWD}/" \
|
||||
-e "s/^(#[[:space:]]+)?(ZITI_INTERFACE)=.*/\2=${ZITI_INTERFACE:-127.0.0.1}/" ./.env > ./.env.tmp
|
||||
-e "s/^(#[[:space:]]*)?(ZITI_PWD)=.*/\2=${ZITI_PWD}/" \
|
||||
-e "s/^(#[[:space:]]*)?(ZITI_ROUTER_NAME)=.*/\2=${ZITI_ROUTER_NAME:=quickstart-router}/" \
|
||||
-e "s/^(#[[:space:]]*)?(ZITI_ROUTER_ADVERTISED_ADDRESS)=.*/\2=${ZITI_ROUTER_ADVERTISED_ADDRESS:=ziti-edge-router}/" \
|
||||
-e "s/^(#[[:space:]]*)?(ZITI_INTERFACE)=.*/\2=${ZITI_INTERFACE:-127.0.0.1}/" ./.env > ./.env.tmp
|
||||
mv ./.env.tmp ./.env
|
||||
|
||||
# pull images preemptively that we never build locally because pull=never when using a local quickstart image
|
||||
@@ -116,13 +124,13 @@ echo -e "ZITI_GO_VERSION=${ZITI_GO_VERSION}"\
|
||||
"\nZITI_QUICK_DIR=${ZITI_QUICK_DIR}" \
|
||||
>> ./.env
|
||||
|
||||
# if ZITI_QUICK_IMAGE_TAG is set then run the locally-built image
|
||||
if [[ -n "${ZITI_QUICK_IMAGE_TAG:-}" ]]; then
|
||||
sed -Ee "s/^(#[[:space:]]+)?(ZITI_VERSION)=.*/\2=${ZITI_QUICK_IMAGE_TAG}/" ./.env > ./.env.tmp
|
||||
# if ZITI_QUICK_TAG is set then run the locally-built image
|
||||
if [[ -n "${ZITI_QUICK_TAG:-}" ]]; then
|
||||
sed -Ee "s/^(#[[:space:]]*)?(ZITI_VERSION)=.*/\2=${ZITI_QUICK_TAG}/" ./.env > ./.env.tmp
|
||||
mv ./.env.tmp ./.env
|
||||
docker compose up --detach --pull=never &>/dev/null # no pull because local quickstart image
|
||||
else
|
||||
echo "ERROR: ZITI_QUICK_IMAGE_TAG is not set" >&2
|
||||
echo "ERROR: ZITI_QUICK_TAG is not set" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -153,7 +161,6 @@ docker compose exec ziti-controller \
|
||||
'
|
||||
# TODO: re-add cert checks to above test suite after https://github.com/openziti/ziti/pull/1278
|
||||
# zsh /persistent/check-cert-chains.zsh;
|
||||
docker compose run quickstart-test
|
||||
docker compose --profile test run --rm quickstart-test
|
||||
|
||||
echo -e "\nINFO: Test completed successfully."
|
||||
|
||||
|
||||
@@ -1,14 +1,22 @@
|
||||
services:
|
||||
quickstart-test:
|
||||
profiles:
|
||||
- test
|
||||
image: golang:${ZITI_GO_VERSION:-noop}-alpine
|
||||
volumes:
|
||||
# mount the parent dir of the quickstart, which is the top-level of the ziti repo working copy, as /mnt
|
||||
- ${ZITI_QUICK_DIR:-noop}/..:/mnt
|
||||
- ${GOPATH:-noop}:/go
|
||||
# re-run tests if significant changes from last result in GOCACHE
|
||||
- ${GOCACHE:-${HOME}/.cache/go-build}:/.cache/go-build
|
||||
# re-download dep packages if significant changes from last download in GOPATH
|
||||
- ${GOPATH:-${HOME}/go}:/go
|
||||
working_dir: /mnt
|
||||
environment:
|
||||
- ZITI_PWD
|
||||
GOCACHE: /.cache/go-build
|
||||
GOPATH: /go
|
||||
GOFLAGS: "-tags=quickstart,manual"
|
||||
ZITI_ROUTER_NAME:
|
||||
ZITI_PWD:
|
||||
networks:
|
||||
- ziti
|
||||
command: >
|
||||
go test -v -tags "quickstart manual" ./ziti/cmd/edge/...
|
||||
command: go test -v ./ziti/cmd/edge/...
|
||||
|
||||
@@ -20,6 +20,7 @@ import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"github.com/openziti/transport/v2/tls"
|
||||
"github.com/openziti/ziti/controller/command"
|
||||
"github.com/openziti/ziti/router/env"
|
||||
"io"
|
||||
"os"
|
||||
@@ -61,6 +62,23 @@ const (
|
||||
|
||||
// CtrlEndpointBindMapKey is the string key for the ctrl.bind section
|
||||
CtrlEndpointBindMapKey = "bind"
|
||||
|
||||
// CtrlRateLimiterMinSizeValue is the minimum size that can be configured for the control channel rate limiter
|
||||
// window range
|
||||
CtrlRateLimiterMinSizeValue = 5
|
||||
|
||||
// CtrlRateLimiterMaxSizeValue is the maximum size that can be configured for the control channel rate limiter
|
||||
// window range
|
||||
CtrlRateLimiterMaxSizeValue = 1000
|
||||
|
||||
// CtrlRateLimiterMetricOutstandingCount is the name of the metric tracking how many tasks are in process
|
||||
CtrlRateLimiterMetricOutstandingCount = "ctrl.limiter.in_process"
|
||||
|
||||
// CtrlRateLimiterMetricCurrentWindowSize is the name of the metric tracking the current window size
|
||||
CtrlRateLimiterMetricCurrentWindowSize = "ctrl.limiter.window_size"
|
||||
|
||||
// CtrlRateLimiterMetricWorkTimer is the name of the metric tracking how long successful tasks are taking to complete
|
||||
CtrlRateLimiterMetricWorkTimer = "ctrl.limiter.work_timer"
|
||||
)
|
||||
|
||||
// internalConfigKeys is used to distinguish internally defined configuration vs file configuration
|
||||
@@ -115,6 +133,7 @@ type Config struct {
|
||||
DataDir string
|
||||
Heartbeats env.HeartbeatOptions
|
||||
StartupTimeout time.Duration
|
||||
RateLimit command.AdaptiveRateLimiterConfig
|
||||
}
|
||||
Link struct {
|
||||
Listeners []map[interface{}]interface{}
|
||||
@@ -527,6 +546,9 @@ func LoadConfig(path string) (*Config, error) {
|
||||
} else {
|
||||
cfg.Ctrl.DataDir = filepath.Dir(cfg.path)
|
||||
}
|
||||
if err = cfg.loadCtrlRateLimiterConfig(submap); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -767,6 +789,43 @@ func LoadConfig(path string) (*Config, error) {
|
||||
return cfg, nil
|
||||
}
|
||||
|
||||
func (c *Config) loadCtrlRateLimiterConfig(cfgmap map[interface{}]interface{}) error {
|
||||
rateLimitConfig := &c.Ctrl.RateLimit
|
||||
rateLimitConfig.SetDefaults()
|
||||
rateLimitConfig.QueueSizeMetric = CtrlRateLimiterMetricOutstandingCount
|
||||
rateLimitConfig.WindowSizeMetric = CtrlRateLimiterMetricCurrentWindowSize
|
||||
rateLimitConfig.WorkTimerMetric = CtrlRateLimiterMetricWorkTimer
|
||||
|
||||
if value, found := cfgmap["rateLimiter"]; found {
|
||||
if submap, ok := value.(map[interface{}]interface{}); ok {
|
||||
if err := command.LoadAdaptiveRateLimiterConfig(rateLimitConfig, submap); err != nil {
|
||||
return err
|
||||
}
|
||||
if rateLimitConfig.MaxSize < CtrlRateLimiterMinSizeValue {
|
||||
return errors.Errorf("invalid value %v for ctrl.rateLimiter.maxSize, must be at least %v",
|
||||
rateLimitConfig.MaxSize, CtrlRateLimiterMinSizeValue)
|
||||
}
|
||||
if rateLimitConfig.MaxSize > CtrlRateLimiterMaxSizeValue {
|
||||
return errors.Errorf("invalid value %v for ctrl.rateLimiter.maxSize, must be at most %v",
|
||||
rateLimitConfig.MaxSize, CtrlRateLimiterMaxSizeValue)
|
||||
}
|
||||
|
||||
if rateLimitConfig.MinSize < CtrlRateLimiterMinSizeValue {
|
||||
return errors.Errorf("invalid value %v for ctrl.rateLimiter.minSize, must be at least %v",
|
||||
rateLimitConfig.MinSize, CtrlRateLimiterMinSizeValue)
|
||||
}
|
||||
if rateLimitConfig.MinSize > CtrlRateLimiterMaxSizeValue {
|
||||
return errors.Errorf("invalid value %v for ctrl.rateLimiter.minSize, must be at most %v",
|
||||
rateLimitConfig.MinSize, CtrlRateLimiterMaxSizeValue)
|
||||
}
|
||||
} else {
|
||||
return errors.Errorf("invalid type for ctrl.rateLimiter, should be map instead of %T", value)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func LoadIdentityConfigFromMap(cfgmap map[interface{}]interface{}) (*identity.Config, error) {
|
||||
if value, found := cfgmap["identity"]; found {
|
||||
subMap := value.(map[interface{}]interface{})
|
||||
|
||||
Vendored
+2
@@ -22,6 +22,7 @@ import (
|
||||
"github.com/openziti/foundation/v2/versions"
|
||||
"github.com/openziti/identity"
|
||||
"github.com/openziti/metrics"
|
||||
"github.com/openziti/ziti/controller/command"
|
||||
"github.com/openziti/ziti/router/xgress"
|
||||
"github.com/openziti/ziti/router/xlink"
|
||||
)
|
||||
@@ -39,5 +40,6 @@ type RouterEnv interface {
|
||||
RenderJsonConfig() (string, error)
|
||||
GetHeartbeatOptions() HeartbeatOptions
|
||||
GetRateLimiterPool() goroutines.Pool
|
||||
GetCtrlRateLimiter() command.AdaptiveRateLimitTracker
|
||||
GetVersionInfo() versions.VersionProvider
|
||||
}
|
||||
|
||||
@@ -55,6 +55,7 @@ type StateManager interface {
|
||||
RemoveEdgeSession(token string)
|
||||
AddEdgeSessionRemovedListener(token string, callBack func(token string)) RemoveListener
|
||||
WasSessionRecentlyRemoved(token string) bool
|
||||
MarkSessionRecentlyRemoved(token string)
|
||||
|
||||
//ApiSessions
|
||||
GetApiSession(token string) *ApiSession
|
||||
@@ -289,6 +290,10 @@ func (sm *StateManagerImpl) WasSessionRecentlyRemoved(token string) bool {
|
||||
return sm.recentlyRemovedSessions.Has(token)
|
||||
}
|
||||
|
||||
func (sm *StateManagerImpl) MarkSessionRecentlyRemoved(token string) {
|
||||
sm.recentlyRemovedSessions.Set(token, time.Now())
|
||||
}
|
||||
|
||||
func (sm *StateManagerImpl) AddEdgeSessionRemovedListener(token string, callBack func(token string)) RemoveListener {
|
||||
if sm.recentlyRemovedSessions.Has(token) {
|
||||
go callBack(token) // callback can be long process with network traffic. Don't block event processing
|
||||
@@ -444,7 +449,7 @@ func (sm *StateManagerImpl) flushRecentlyRemoved() {
|
||||
sm.recentlyRemovedSessions.IterCb(func(key string, t time.Time) {
|
||||
remove := false
|
||||
|
||||
if now.Sub(t) >= time.Minute {
|
||||
if now.Sub(t) >= 5*time.Minute {
|
||||
remove = true
|
||||
}
|
||||
|
||||
|
||||
@@ -32,10 +32,11 @@ import (
|
||||
)
|
||||
|
||||
type bindHandler struct {
|
||||
env env.RouterEnv
|
||||
forwarder *forwarder.Forwarder
|
||||
xgDialerPool goroutines.Pool
|
||||
ctrlAddressUpdater CtrlAddressUpdater
|
||||
env env.RouterEnv
|
||||
forwarder *forwarder.Forwarder
|
||||
xgDialerPool goroutines.Pool
|
||||
terminatorValidationPool goroutines.Pool
|
||||
ctrlAddressUpdater CtrlAddressUpdater
|
||||
}
|
||||
|
||||
func NewBindHandler(routerEnv env.RouterEnv, forwarder *forwarder.Forwarder, ctrlAddressUpdater CtrlAddressUpdater) (channel.BindHandler, error) {
|
||||
@@ -57,11 +58,30 @@ func NewBindHandler(routerEnv env.RouterEnv, forwarder *forwarder.Forwarder, ctr
|
||||
return nil, errors.Wrap(err, "error creating xgress route handler pool")
|
||||
}
|
||||
|
||||
terminatorValidatorPoolConfig := goroutines.PoolConfig{
|
||||
QueueSize: uint32(1),
|
||||
MinWorkers: 0,
|
||||
MaxWorkers: uint32(50),
|
||||
IdleTime: 30 * time.Second,
|
||||
CloseNotify: routerEnv.GetCloseNotify(),
|
||||
PanicHandler: func(err interface{}) {
|
||||
pfxlog.Logger().WithField(logrus.ErrorKey, err).WithField("backtrace", string(debug.Stack())).Error("panic during terminator validation operation")
|
||||
},
|
||||
}
|
||||
|
||||
metrics.ConfigureGoroutinesPoolMetrics(&terminatorValidatorPoolConfig, routerEnv.GetMetricsRegistry(), "pool.terminator_validation")
|
||||
|
||||
terminatorValidationPool, err := goroutines.NewPool(terminatorValidatorPoolConfig)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "error creating terminator validation pool")
|
||||
}
|
||||
|
||||
return &bindHandler{
|
||||
env: routerEnv,
|
||||
forwarder: forwarder,
|
||||
xgDialerPool: xgDialerPool,
|
||||
ctrlAddressUpdater: ctrlAddressUpdater,
|
||||
env: routerEnv,
|
||||
forwarder: forwarder,
|
||||
xgDialerPool: xgDialerPool,
|
||||
terminatorValidationPool: terminatorValidationPool,
|
||||
ctrlAddressUpdater: ctrlAddressUpdater,
|
||||
}, nil
|
||||
}
|
||||
|
||||
@@ -70,7 +90,7 @@ func (self *bindHandler) BindChannel(binding channel.Binding) error {
|
||||
binding.AddTypedReceiveHandler(newDialHandler(self.env))
|
||||
binding.AddTypedReceiveHandler(newRouteHandler(binding.GetChannel(), self.env, self.forwarder, self.xgDialerPool))
|
||||
binding.AddTypedReceiveHandler(newValidateTerminatorsHandler(self.env))
|
||||
binding.AddTypedReceiveHandler(newValidateTerminatorsV2Handler(self.env))
|
||||
binding.AddTypedReceiveHandler(newValidateTerminatorsV2Handler(self.env, self.terminatorValidationPool))
|
||||
binding.AddTypedReceiveHandler(newUnrouteHandler(self.forwarder))
|
||||
binding.AddTypedReceiveHandler(newTraceHandler(self.env.GetRouterId(), self.forwarder.TraceController(), binding.GetChannel()))
|
||||
binding.AddTypedReceiveHandler(newInspectHandler(self.env, self.forwarder))
|
||||
|
||||
@@ -18,12 +18,14 @@ package handler_ctrl
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"github.com/michaelquigley/pfxlog"
|
||||
"github.com/openziti/channel/v2"
|
||||
"github.com/openziti/foundation/v2/debugz"
|
||||
"github.com/openziti/ziti/common/pb/ctrl_pb"
|
||||
"github.com/openziti/ziti/router/env"
|
||||
"github.com/openziti/ziti/router/forwarder"
|
||||
"github.com/openziti/foundation/v2/debugz"
|
||||
"github.com/openziti/ziti/router/xgress"
|
||||
"github.com/pkg/errors"
|
||||
"google.golang.org/protobuf/proto"
|
||||
"strings"
|
||||
@@ -90,6 +92,29 @@ func (context *inspectRequestContext) processLocal() {
|
||||
} else {
|
||||
context.appendValue(requested, string(js))
|
||||
}
|
||||
} else if lc == "sdk-terminators" {
|
||||
factory, _ := xgress.GlobalRegistry().Factory("edge")
|
||||
if factory == nil {
|
||||
context.appendError("no xgress factory configured for edge binding")
|
||||
continue
|
||||
}
|
||||
dialer, err := factory.CreateDialer(context.handler.env.GetDialerCfg()["edge"])
|
||||
if err != nil {
|
||||
context.appendError(fmt.Sprintf("could not create edge dialer: (%s)", err.Error()))
|
||||
continue
|
||||
}
|
||||
inspectable, ok := dialer.(xgress.Inspectable)
|
||||
if !ok {
|
||||
context.appendError("edge dialer is not of type Inspectable")
|
||||
continue
|
||||
}
|
||||
result := inspectable.Inspect(lc, time.Second)
|
||||
js, err := json.Marshal(result)
|
||||
if err != nil {
|
||||
context.appendError(errors.Wrap(err, "failed to marshal sdk terminators to json").Error())
|
||||
} else {
|
||||
context.appendValue(requested, string(js))
|
||||
}
|
||||
} else if strings.HasPrefix(lc, "circuit:") {
|
||||
circuitId := requested[len("circuit:"):]
|
||||
result := context.handler.fwd.InspectCircuit(circuitId, false)
|
||||
|
||||
@@ -18,6 +18,7 @@ package handler_ctrl
|
||||
|
||||
import (
|
||||
"github.com/openziti/ziti/router/env"
|
||||
"net"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
@@ -178,7 +179,7 @@ func (rh *routeHandler) connectEgress(msg *channel.Message, attempt int, ch chan
|
||||
switch {
|
||||
case errors.Is(err, syscall.ECONNREFUSED):
|
||||
errCode = ctrl_msg.ErrorTypeConnectionRefused
|
||||
case errors.Is(err, syscall.ETIMEDOUT):
|
||||
case isNetworkTimeout(err) || errors.Is(err, syscall.ETIMEDOUT):
|
||||
errCode = ctrl_msg.ErrorTypeDialTimedOut
|
||||
case errors.As(err, &xgress.MisconfiguredTerminatorError{}):
|
||||
errCode = ctrl_msg.ErrorTypeMisconfiguredTerminator
|
||||
@@ -200,6 +201,11 @@ func (rh *routeHandler) connectEgress(msg *channel.Message, attempt int, ch chan
|
||||
}
|
||||
}
|
||||
|
||||
func isNetworkTimeout(err error) bool {
|
||||
var netErr net.Error
|
||||
return errors.As(err, &netErr)
|
||||
}
|
||||
|
||||
func newDialParams(ctrlId string, route *ctrl_pb.Route, bindHandler xgress.BindHandler, logContext logcontext.Context, deadline time.Time) *dialParams {
|
||||
return &dialParams{
|
||||
ctrlId: ctrlId,
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
package handler_ctrl
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"testing"
|
||||
)
|
||||
|
||||
type testTimeoutErr struct{}
|
||||
|
||||
func (t testTimeoutErr) Error() string {
|
||||
return "test"
|
||||
}
|
||||
|
||||
func (t testTimeoutErr) Timeout() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func (t testTimeoutErr) Temporary() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func Test_TimeoutCheck(t *testing.T) {
|
||||
err := testTimeoutErr{}
|
||||
req := assert.New(t)
|
||||
req.True(isNetworkTimeout(err))
|
||||
|
||||
wrapped := fmt.Errorf("there was an error (%w)", err)
|
||||
req.True(isNetworkTimeout(wrapped))
|
||||
}
|
||||
@@ -20,19 +20,23 @@ import (
|
||||
"github.com/michaelquigley/pfxlog"
|
||||
"github.com/openziti/channel/v2"
|
||||
"github.com/openziti/channel/v2/protobufs"
|
||||
"github.com/openziti/foundation/v2/goroutines"
|
||||
"github.com/openziti/ziti/common/pb/ctrl_pb"
|
||||
"github.com/openziti/ziti/router/env"
|
||||
"github.com/openziti/ziti/router/xgress"
|
||||
"google.golang.org/protobuf/proto"
|
||||
"time"
|
||||
)
|
||||
|
||||
type validateTerminatorsV2Handler struct {
|
||||
env env.RouterEnv
|
||||
env env.RouterEnv
|
||||
pool goroutines.Pool
|
||||
}
|
||||
|
||||
func newValidateTerminatorsV2Handler(env env.RouterEnv) *validateTerminatorsV2Handler {
|
||||
func newValidateTerminatorsV2Handler(env env.RouterEnv, pool goroutines.Pool) *validateTerminatorsV2Handler {
|
||||
return &validateTerminatorsV2Handler{
|
||||
env: env,
|
||||
env: env,
|
||||
pool: pool,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -64,7 +68,11 @@ func (handler *validateTerminatorsV2Handler) validateTerminators(msg *channel.Me
|
||||
States: map[string]*ctrl_pb.RouterTerminatorState{},
|
||||
}
|
||||
|
||||
for _, terminator := range req.Terminators {
|
||||
expected := 0
|
||||
results := make(chan func(*ctrl_pb.ValidateTerminatorsV2Response), len(req.Terminators))
|
||||
|
||||
for _, val := range req.Terminators {
|
||||
terminator := val
|
||||
binding := terminator.Binding
|
||||
dialer := dialers[binding]
|
||||
if dialer == nil {
|
||||
@@ -74,32 +82,42 @@ func (handler *validateTerminatorsV2Handler) validateTerminators(msg *channel.Me
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
log.WithField("terminatorId", terminator.Id).Debug("beginning terminator validation")
|
||||
if dialer == nil {
|
||||
response.States[terminator.Id] = &ctrl_pb.RouterTerminatorState{
|
||||
Valid: false,
|
||||
Reason: ctrl_pb.TerminatorInvalidReason_UnknownBinding,
|
||||
}
|
||||
} else if inspectable, ok := dialer.(xgress.InspectableDialer); ok {
|
||||
valid, state := inspectable.InspectTerminator(terminator.Id, terminator.Address, req.FixInvalid)
|
||||
response.States[terminator.Id] = &ctrl_pb.RouterTerminatorState{
|
||||
Valid: valid,
|
||||
Detail: state,
|
||||
Reason: ctrl_pb.TerminatorInvalidReason_UnknownTerminator,
|
||||
}
|
||||
} else if !dialer.IsTerminatorValid(terminator.Id, terminator.Address) {
|
||||
response.States[terminator.Id] = &ctrl_pb.RouterTerminatorState{
|
||||
Valid: false,
|
||||
Reason: ctrl_pb.TerminatorInvalidReason_UnknownTerminator,
|
||||
Marker: val.Marker,
|
||||
}
|
||||
} else {
|
||||
response.States[terminator.Id] = &ctrl_pb.RouterTerminatorState{
|
||||
Valid: true,
|
||||
Detail: "valid",
|
||||
err := handler.pool.Queue(func() {
|
||||
log.WithField("terminatorId", terminator.Id).Info("validating terminator")
|
||||
result := handler.validateTerminator(dialer, terminator, req.FixInvalid)
|
||||
results <- func(response *ctrl_pb.ValidateTerminatorsV2Response) {
|
||||
response.States[terminator.Id] = result
|
||||
}
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
log.WithField("terminatorId", terminator.Id).WithError(err).Error("unable to queue inspect")
|
||||
} else {
|
||||
expected++
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
timeout := time.After(30 * time.Second)
|
||||
timedOut := false
|
||||
for i := 0; i < expected && !timedOut; i++ {
|
||||
select {
|
||||
case result := <-results:
|
||||
result(response)
|
||||
case <-timeout:
|
||||
timedOut = true
|
||||
log.Info("timed out waiting for terminator validations")
|
||||
}
|
||||
}
|
||||
|
||||
err := protobufs.MarshalTyped(response).
|
||||
ReplyTo(msg).
|
||||
WithTimeout(handler.env.GetNetworkControllers().DefaultRequestTimeout()).
|
||||
@@ -109,3 +127,29 @@ func (handler *validateTerminatorsV2Handler) validateTerminators(msg *channel.Me
|
||||
log.WithError(err).Error("failed to send validate terminators v2 response")
|
||||
}
|
||||
}
|
||||
|
||||
func (handler *validateTerminatorsV2Handler) validateTerminator(dialer xgress.Dialer, terminator *ctrl_pb.Terminator, fixInvalid bool) *ctrl_pb.RouterTerminatorState {
|
||||
if inspectable, ok := dialer.(xgress.InspectableDialer); ok {
|
||||
valid, state := inspectable.InspectTerminator(terminator.Id, terminator.Address, fixInvalid)
|
||||
return &ctrl_pb.RouterTerminatorState{
|
||||
Valid: valid,
|
||||
Detail: state,
|
||||
Reason: ctrl_pb.TerminatorInvalidReason_UnknownTerminator,
|
||||
Marker: terminator.Marker,
|
||||
}
|
||||
}
|
||||
|
||||
if !dialer.IsTerminatorValid(terminator.Id, terminator.Address) {
|
||||
return &ctrl_pb.RouterTerminatorState{
|
||||
Valid: false,
|
||||
Reason: ctrl_pb.TerminatorInvalidReason_UnknownTerminator,
|
||||
Marker: terminator.Marker,
|
||||
}
|
||||
}
|
||||
|
||||
return &ctrl_pb.RouterTerminatorState{
|
||||
Valid: true,
|
||||
Detail: "valid",
|
||||
Marker: terminator.Marker,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -129,18 +129,21 @@ func (h *apiSessionAddedHandler) syncFailed(err error) {
|
||||
h.trackerLock.Lock()
|
||||
defer h.trackerLock.Unlock()
|
||||
|
||||
logrus.WithError(err).Error("failed to synchronize api sessions")
|
||||
// can be called twice, only notify the first time
|
||||
if h.syncTracker != nil {
|
||||
logrus.WithError(err).Error("failed to synchronize api sessions")
|
||||
|
||||
h.syncTracker.Stop()
|
||||
h.sm.MarkSyncStopped(h.syncTracker.syncId)
|
||||
h.syncTracker.Stop()
|
||||
h.sm.MarkSyncStopped(h.syncTracker.syncId)
|
||||
|
||||
h.syncTracker = nil
|
||||
h.syncTracker = nil
|
||||
|
||||
resync := &edge_ctrl_pb.RequestClientReSync{
|
||||
Reason: fmt.Sprintf("error during api session sync: %v", err),
|
||||
}
|
||||
if err := protobufs.MarshalTyped(resync).Send(h.control); err != nil {
|
||||
logrus.WithError(err).Error("failed to send request client re-sync message")
|
||||
resync := &edge_ctrl_pb.RequestClientReSync{
|
||||
Reason: fmt.Sprintf("error during api session sync: %v", err),
|
||||
}
|
||||
if err := protobufs.MarshalTyped(resync).Send(h.control); err != nil {
|
||||
logrus.WithError(err).Error("failed to send request client re-sync message")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,47 +0,0 @@
|
||||
/*
|
||||
Copyright NetFoundry Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
https://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package router
|
||||
|
||||
import (
|
||||
"github.com/michaelquigley/pfxlog"
|
||||
"github.com/openziti/ziti/router/forwarder"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
)
|
||||
|
||||
type routerMonitor struct {
|
||||
forwarder *forwarder.Forwarder
|
||||
closeNotify <-chan struct{}
|
||||
}
|
||||
|
||||
func newRouterMonitor(forwarder *forwarder.Forwarder, closeNotify <-chan struct{}) *routerMonitor {
|
||||
return &routerMonitor{forwarder: forwarder, closeNotify: closeNotify}
|
||||
}
|
||||
|
||||
func (routerMonitor *routerMonitor) Monitor() {
|
||||
signalChan := make(chan os.Signal, 1)
|
||||
signal.Notify(signalChan, syscall.SIGUSR1)
|
||||
for {
|
||||
select {
|
||||
case <-signalChan:
|
||||
pfxlog.Logger().Info("\n" + routerMonitor.forwarder.Debug())
|
||||
case <-routerMonitor.closeNotify:
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +1,5 @@
|
||||
//go:build linux || darwin || freebsd
|
||||
|
||||
/*
|
||||
Copyright NetFoundry Inc.
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
//go:build windows
|
||||
|
||||
/*
|
||||
Copyright NetFoundry Inc.
|
||||
|
||||
|
||||
@@ -21,6 +21,7 @@ import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"github.com/openziti/ziti/controller/command"
|
||||
"io/fs"
|
||||
"os"
|
||||
"path"
|
||||
@@ -82,6 +83,7 @@ type Router struct {
|
||||
xgressListeners []xgress.Listener
|
||||
linkDialerPool goroutines.Pool
|
||||
rateLimiterPool goroutines.Pool
|
||||
ctrlRateLimiter command.AdaptiveRateLimitTracker
|
||||
metricsRegistry metrics.UsageRegistry
|
||||
shutdownC chan struct{}
|
||||
shutdownDoneC chan struct{}
|
||||
@@ -191,6 +193,7 @@ func Create(config *Config, versionProvider versions.VersionProvider) *Router {
|
||||
debugOperations: map[byte]func(c *bufio.ReadWriter) error{},
|
||||
xwebFactoryRegistry: xweb.NewRegistryMap(),
|
||||
linkDialerPool: linkDialerPool,
|
||||
ctrlRateLimiter: command.NewAdaptiveRateLimitTracker(config.Ctrl.RateLimit, metricsRegistry, closeNotify),
|
||||
}
|
||||
|
||||
router.ctrls = env.NewNetworkControllers(config.Ctrl.DefaultRequestTimeout, router.connectToController, &config.Ctrl.Heartbeats)
|
||||
@@ -379,6 +382,10 @@ func (self *Router) GetRateLimiterPool() goroutines.Pool {
|
||||
return self.rateLimiterPool
|
||||
}
|
||||
|
||||
func (self *Router) GetCtrlRateLimiter() command.AdaptiveRateLimitTracker {
|
||||
return self.ctrlRateLimiter
|
||||
}
|
||||
|
||||
func (self *Router) registerComponents() error {
|
||||
self.xlinkFactories = make(map[string]xlink.Factory)
|
||||
xlinkAccepter := newXlinkAccepter(self.forwarder)
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package router
|
||||
|
||||
import (
|
||||
"github.com/openziti/ziti/controller/command"
|
||||
"github.com/openziti/ziti/router/env"
|
||||
"github.com/stretchr/testify/require"
|
||||
"os"
|
||||
@@ -50,6 +51,7 @@ func Test_initializeCtrlEndpoints(t *testing.T) {
|
||||
DataDir string
|
||||
Heartbeats env.HeartbeatOptions
|
||||
StartupTimeout time.Duration
|
||||
RateLimit command.AdaptiveRateLimiterConfig
|
||||
}{
|
||||
DataDir: tmpDir,
|
||||
InitialEndpoints: []*UpdatableAddress{NewUpdatableAddress(addr)},
|
||||
@@ -91,6 +93,7 @@ func Test_updateCtrlEndpoints(t *testing.T) {
|
||||
DataDir string
|
||||
Heartbeats env.HeartbeatOptions
|
||||
StartupTimeout time.Duration
|
||||
RateLimit command.AdaptiveRateLimiterConfig
|
||||
}{
|
||||
DataDir: tmpDir,
|
||||
InitialEndpoints: []*UpdatableAddress{NewUpdatableAddress(addr), NewUpdatableAddress(addr2)},
|
||||
|
||||
@@ -21,10 +21,10 @@ import (
|
||||
"github.com/michaelquigley/pfxlog"
|
||||
"github.com/openziti/channel/v2"
|
||||
"github.com/openziti/channel/v2/protobufs"
|
||||
"github.com/openziti/ziti/common/ctrl_msg"
|
||||
"github.com/openziti/ziti/common/pb/ctrl_pb"
|
||||
"github.com/openziti/identity"
|
||||
"github.com/openziti/transport/v2"
|
||||
"github.com/openziti/ziti/common/ctrl_msg"
|
||||
"github.com/openziti/ziti/common/pb/ctrl_pb"
|
||||
"github.com/pkg/errors"
|
||||
"io"
|
||||
"time"
|
||||
|
||||
@@ -77,6 +77,10 @@ type InspectableDialer interface {
|
||||
InspectTerminator(id string, destination string, fixInvalid bool) (bool, string)
|
||||
}
|
||||
|
||||
type Inspectable interface {
|
||||
Inspect(key string, timeout time.Duration) any
|
||||
}
|
||||
|
||||
type Factory interface {
|
||||
CreateListener(optionsData OptionsData) (Listener, error)
|
||||
CreateDialer(optionsData OptionsData) (Dialer, error)
|
||||
|
||||
@@ -44,8 +44,9 @@ func (dialer *dialer) InspectTerminator(id string, destination string, fixInvali
|
||||
terminatorAddress := strings.TrimPrefix(destination, "hosted:")
|
||||
pfxlog.Logger().Debug("looking up hosted service conn")
|
||||
terminator, found := dialer.factory.hostedServices.Get(terminatorAddress)
|
||||
if found && terminator.terminatorId.Load() == id {
|
||||
result, err := terminator.inspect(fixInvalid)
|
||||
if found && terminator.terminatorId == id {
|
||||
dialer.factory.hostedServices.markEstablished(terminator, "validation message received")
|
||||
result, err := terminator.inspect(dialer.factory.hostedServices, fixInvalid, false)
|
||||
if err != nil {
|
||||
return true, err.Error()
|
||||
}
|
||||
@@ -187,3 +188,10 @@ func (dialer *dialer) Dial(params xgress.DialParams) (xt.PeerData, error) {
|
||||
return nil, terminator.SendState(start)
|
||||
}
|
||||
}
|
||||
|
||||
func (dialer *dialer) Inspect(key string, timeout time.Duration) any {
|
||||
if key == "sdk-terminators" {
|
||||
return dialer.factory.hostedServices.Inspect(timeout)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
+141
-63
@@ -17,17 +17,19 @@
|
||||
package xgress_edge
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/michaelquigley/pfxlog"
|
||||
"github.com/openziti/channel/v2"
|
||||
"github.com/openziti/foundation/v2/concurrenz"
|
||||
"github.com/openziti/sdk-golang/ziti/edge"
|
||||
"github.com/openziti/ziti/common/pb/edge_ctrl_pb"
|
||||
"github.com/openziti/ziti/controller/command"
|
||||
"github.com/openziti/ziti/router/xgress"
|
||||
"github.com/openziti/ziti/router/xgress_common"
|
||||
"github.com/pkg/errors"
|
||||
"io"
|
||||
"math"
|
||||
"math/rand"
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
)
|
||||
@@ -44,16 +46,13 @@ var headersFromFabric = map[uint8]int32{
|
||||
type terminatorState int
|
||||
|
||||
const (
|
||||
TerminatorStatePendingEstablishment terminatorState = 0
|
||||
TerminatorStateEstablishing terminatorState = 1
|
||||
TerminatorStateEstablished terminatorState = 2
|
||||
TerminatorStateDeleting terminatorState = 3
|
||||
TerminatorStateEstablishing terminatorState = 1
|
||||
TerminatorStateEstablished terminatorState = 2
|
||||
TerminatorStateDeleting terminatorState = 3
|
||||
)
|
||||
|
||||
func (self terminatorState) String() string {
|
||||
switch self {
|
||||
case TerminatorStatePendingEstablishment:
|
||||
return "pending-establishment"
|
||||
case TerminatorStateEstablishing:
|
||||
return "establishing"
|
||||
case TerminatorStateEstablished:
|
||||
@@ -65,10 +64,23 @@ func (self terminatorState) String() string {
|
||||
}
|
||||
}
|
||||
|
||||
func (self terminatorState) IsWorkRequired() bool {
|
||||
switch self {
|
||||
case TerminatorStateEstablishing:
|
||||
return true
|
||||
case TerminatorStateDeleting:
|
||||
return true
|
||||
case TerminatorStateEstablished:
|
||||
return false
|
||||
default:
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
type edgeTerminator struct {
|
||||
edge.MsgChannel
|
||||
edgeClientConn *edgeClientConn
|
||||
terminatorId concurrenz.AtomicValue[string]
|
||||
terminatorId string
|
||||
listenerId string
|
||||
token string
|
||||
instance string
|
||||
@@ -80,44 +92,113 @@ type edgeTerminator struct {
|
||||
onClose func()
|
||||
v2 bool
|
||||
state concurrenz.AtomicValue[terminatorState]
|
||||
postValidate bool
|
||||
nextAttempt time.Time
|
||||
retryDelay time.Duration
|
||||
establishActive atomic.Bool
|
||||
supportsInspect bool
|
||||
operationActive atomic.Bool
|
||||
createTime time.Time
|
||||
establishCallback func(ok bool, msg string)
|
||||
lastAttempt time.Time
|
||||
establishCallback func(result edge_ctrl_pb.CreateTerminatorResult)
|
||||
lock sync.Mutex
|
||||
rateLimitCallback command.RateLimitControl
|
||||
}
|
||||
|
||||
func (self *edgeTerminator) calculateRetry(queueFailed bool) {
|
||||
retryDelay := time.Second
|
||||
func (self *edgeTerminator) replace(other *edgeTerminator) {
|
||||
other.lock.Lock()
|
||||
terminatorId := other.terminatorId
|
||||
state := other.state.Load()
|
||||
rateLimitCallback := other.rateLimitCallback
|
||||
operationActive := other.operationActive.Load()
|
||||
createTime := other.createTime
|
||||
lastAttempt := other.lastAttempt
|
||||
other.lock.Unlock()
|
||||
|
||||
if !queueFailed {
|
||||
if self.retryDelay < time.Second {
|
||||
self.retryDelay = time.Second
|
||||
} else {
|
||||
self.retryDelay = self.retryDelay * 2
|
||||
if self.retryDelay > 30*time.Second {
|
||||
self.retryDelay = 30 * time.Second
|
||||
}
|
||||
self.lock.Lock()
|
||||
self.terminatorId = terminatorId
|
||||
self.setState(state, "replacing existing terminator")
|
||||
self.rateLimitCallback = rateLimitCallback
|
||||
self.operationActive.Store(operationActive)
|
||||
self.createTime = createTime
|
||||
self.lastAttempt = lastAttempt
|
||||
self.lock.Unlock()
|
||||
}
|
||||
|
||||
func (self *edgeTerminator) IsEstablishing() bool {
|
||||
return self.state.Load() == TerminatorStateEstablishing
|
||||
}
|
||||
|
||||
func (self *edgeTerminator) IsDeleting() bool {
|
||||
return self.state.Load() == TerminatorStateDeleting
|
||||
}
|
||||
|
||||
func (self *edgeTerminator) setState(state terminatorState, reason string) {
|
||||
if oldState := self.state.Load(); oldState != state {
|
||||
self.state.Store(state)
|
||||
pfxlog.Logger().WithField("terminatorId", self.terminatorId).
|
||||
WithField("oldState", oldState).
|
||||
WithField("newState", state).
|
||||
WithField("reason", reason).
|
||||
Info("updated state")
|
||||
}
|
||||
}
|
||||
|
||||
func (self *edgeTerminator) updateState(oldState, newState terminatorState, reason string) bool {
|
||||
log := pfxlog.Logger().WithField("terminatorId", self.terminatorId).
|
||||
WithField("oldState", oldState).
|
||||
WithField("newState", newState).
|
||||
WithField("reason", reason)
|
||||
success := self.state.CompareAndSwap(oldState, newState)
|
||||
if success {
|
||||
log.Info("updated state")
|
||||
}
|
||||
return success
|
||||
}
|
||||
|
||||
func (self *edgeTerminator) inspect(registry *hostedServiceRegistry, fixInvalidTerminators bool, notifyCtrl bool) (*edge.InspectResult, error) {
|
||||
result := &edge.InspectResult{
|
||||
ConnId: self.MsgChannel.Id(),
|
||||
Type: edge.ConnTypeUnknown,
|
||||
Detail: "channel closed",
|
||||
}
|
||||
|
||||
var err error
|
||||
isInvalid := false
|
||||
if !self.Channel.IsClosed() {
|
||||
msg := channel.NewMessage(edge.ContentTypeConnInspectRequest, nil)
|
||||
msg.PutUint32Header(edge.ConnIdHeader, self.Id())
|
||||
resp, err := msg.WithTimeout(10 * time.Second).SendForReply(self.Channel)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("unable to check status with sdk client: (%w)", err)
|
||||
}
|
||||
retryDelay = self.retryDelay
|
||||
|
||||
result, err = edge.UnmarshalInspectResult(resp)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("unable to unmarshal inspect response from sdk client: (%w)", err)
|
||||
}
|
||||
|
||||
isInvalid = result != nil && result.Type != edge.ConnTypeBind
|
||||
} else {
|
||||
isInvalid = true
|
||||
err = errors.New("channel closed")
|
||||
}
|
||||
|
||||
actualDelay := (float64(retryDelay.Milliseconds()) * 1.5) - float64(rand.Intn(int(retryDelay.Milliseconds())))
|
||||
self.nextAttempt = time.Now().Add(time.Millisecond * time.Duration(actualDelay))
|
||||
}
|
||||
if isInvalid && fixInvalidTerminators {
|
||||
removeResult := registry.handleSdkReturnedInvalid(self, notifyCtrl)
|
||||
if removeResult.err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if removeResult.removed || !removeResult.existed {
|
||||
return result, err
|
||||
}
|
||||
current, _ := registry.Get(self.terminatorId)
|
||||
if current == nil {
|
||||
return result, err
|
||||
}
|
||||
|
||||
func (self *edgeTerminator) inspect(fixInvalidTerminators bool) (*edge.InspectResult, error) {
|
||||
msg := channel.NewMessage(edge.ContentTypeConnInspectRequest, nil)
|
||||
msg.PutUint32Header(edge.ConnIdHeader, self.Id())
|
||||
resp, err := msg.WithTimeout(10 * time.Second).SendForReply(self.Channel)
|
||||
if err != nil {
|
||||
return nil, errors.New("unable to check status with sdk client")
|
||||
}
|
||||
result, err := edge.UnmarshalInspectResult(resp)
|
||||
if result != nil && result.Type != edge.ConnTypeBind && fixInvalidTerminators {
|
||||
self.close(true, true, "terminator invalid")
|
||||
if current == self { // this shouldn't happen
|
||||
return result, errors.New("wasn't able to remove, but is still current")
|
||||
}
|
||||
return current.inspect(registry, fixInvalidTerminators, notifyCtrl)
|
||||
}
|
||||
|
||||
return result, err
|
||||
}
|
||||
|
||||
@@ -130,9 +211,9 @@ func (self *edgeTerminator) nextDialConnId() uint32 {
|
||||
return nextId
|
||||
}
|
||||
|
||||
func (self *edgeTerminator) close(notifySdk bool, notifyCtrl bool, reason string) {
|
||||
func (self *edgeTerminator) close(registry *hostedServiceRegistry, notifySdk bool, notifyCtrl bool, reason string) {
|
||||
logger := pfxlog.Logger().
|
||||
WithField("terminatorId", self.terminatorId.Load()).
|
||||
WithField("terminatorId", self.terminatorId).
|
||||
WithField("token", self.token).
|
||||
WithField("reason", reason)
|
||||
|
||||
@@ -146,36 +227,19 @@ func (self *edgeTerminator) close(notifySdk bool, notifyCtrl bool, reason string
|
||||
}
|
||||
|
||||
if self.v2 {
|
||||
if terminatorId := self.terminatorId.Load(); terminatorId != "" {
|
||||
if self.terminatorId.CompareAndSwap(terminatorId, "") {
|
||||
logger.Debug("removing terminator on router")
|
||||
|
||||
self.state.Store(TerminatorStateDeleting)
|
||||
self.edgeClientConn.listener.factory.hostedServices.Delete(terminatorId)
|
||||
|
||||
if notifyCtrl {
|
||||
logger.Info("removing terminator on controller")
|
||||
ctrlCh := self.edgeClientConn.listener.factory.ctrls.AnyCtrlChannel()
|
||||
if ctrlCh == nil {
|
||||
logger.Error("no controller available, unable to remove terminator")
|
||||
} else if err := self.edgeClientConn.removeTerminator(ctrlCh, self.token, terminatorId); err != nil {
|
||||
logger.WithError(err).Error("failed to remove terminator")
|
||||
} else {
|
||||
logger.Info("Successfully removed terminator")
|
||||
}
|
||||
}
|
||||
} else {
|
||||
logger.Warn("edge terminator closing, but no terminator id set, so can't remove on controller")
|
||||
}
|
||||
if notifyCtrl {
|
||||
registry.queueRemoveTerminatorAsync(self, reason)
|
||||
} else {
|
||||
self.edgeClientConn.listener.factory.hostedServices.Remove(self, reason)
|
||||
}
|
||||
} else {
|
||||
if notifyCtrl {
|
||||
if terminatorId := self.terminatorId.Load(); terminatorId != "" {
|
||||
if self.terminatorId != "" {
|
||||
logger.Info("removing terminator on controller")
|
||||
ctrlCh := self.edgeClientConn.listener.factory.ctrls.AnyCtrlChannel()
|
||||
if ctrlCh == nil {
|
||||
logger.Error("no controller available, unable to remove terminator")
|
||||
} else if err := self.edgeClientConn.removeTerminator(ctrlCh, self.token, terminatorId); err != nil {
|
||||
} else if err := self.edgeClientConn.removeTerminator(ctrlCh, self.token, self.terminatorId); err != nil {
|
||||
logger.WithError(err).Error("failed to remove terminator")
|
||||
} else {
|
||||
logger.Info("successfully removed terminator")
|
||||
@@ -185,7 +249,7 @@ func (self *edgeTerminator) close(notifySdk bool, notifyCtrl bool, reason string
|
||||
}
|
||||
}
|
||||
|
||||
logger.Debug("removing terminator on router")
|
||||
logger.Info("terminator removed from router set")
|
||||
self.edgeClientConn.listener.factory.hostedServices.Delete(self.token)
|
||||
}
|
||||
|
||||
@@ -209,6 +273,20 @@ func (self *edgeTerminator) newConnection(connId uint32) (*edgeXgressConn, error
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (self *edgeTerminator) SetRateLimitCallback(control command.RateLimitControl) {
|
||||
self.lock.Lock()
|
||||
defer self.lock.Unlock()
|
||||
self.rateLimitCallback = control
|
||||
}
|
||||
|
||||
func (self *edgeTerminator) GetAndClearRateLimitCallback() command.RateLimitControl {
|
||||
self.lock.Lock()
|
||||
defer self.lock.Unlock()
|
||||
result := self.rateLimitCallback
|
||||
self.rateLimitCallback = nil
|
||||
return result
|
||||
}
|
||||
|
||||
type edgeXgressConn struct {
|
||||
edge.MsgChannel
|
||||
mux edge.MsgMux
|
||||
|
||||
+771
-200
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user