From 75c6b332ae52ebbd26b6f8253029579cd466ee24 Mon Sep 17 00:00:00 2001 From: sheidkamp Date: Wed, 5 Mar 2025 13:50:10 -0500 Subject: [PATCH 1/7] First pass --- .../gloo/api/v1/options/als/als.proto.sk.md | 2 + .../gloo/crds/gateway.solo.io_v1_Gateway.yaml | 8 + .../gateway.solo.io_v1_ListenerOption.yaml | 8 + .../helm/gloo/crds/gloo.solo.io_v1_Proxy.yaml | 8 + projects/accesslogger/pkg/runner/run.go | 4 + projects/gloo/api/v1/options/als/als.proto | 4 + .../pkg/api/v1/options/als/als.pb.clone.go | 9 + .../pkg/api/v1/options/als/als.pb.equal.go | 11 + .../gloo/pkg/api/v1/options/als/als.pb.go | 336 +++++++++--------- .../pkg/api/v1/options/als/als.pb.hash.go | 8 + .../api/v1/options/als/als.pb.uniquehash.go | 17 + projects/gloo/pkg/plugins/als/converter.go | 7 +- projects/gloo/pkg/plugins/als/plugin_test.go | 16 +- test/e2e/access_log_test.go | 103 ++++++ 14 files changed, 371 insertions(+), 170 deletions(-) diff --git a/docs/content/reference/api/github.com/solo-io/gloo/projects/gloo/api/v1/options/als/als.proto.sk.md b/docs/content/reference/api/github.com/solo-io/gloo/projects/gloo/api/v1/options/als/als.proto.sk.md index 429d1f27e53..0be01ee9c72 100644 --- a/docs/content/reference/api/github.com/solo-io/gloo/projects/gloo/api/v1/options/als/als.proto.sk.md +++ b/docs/content/reference/api/github.com/solo-io/gloo/projects/gloo/api/v1/options/als/als.proto.sk.md @@ -111,6 +111,7 @@ See here for more information: https://www.envoyproxy.io/docs/envoy/latest/api-v "additionalRequestHeadersToLog": []string "additionalResponseHeadersToLog": []string "additionalResponseTrailersToLog": []string +"filterStateObjectsToLog": []string ``` @@ -121,6 +122,7 @@ See here for more information: https://www.envoyproxy.io/docs/envoy/latest/api-v | `additionalRequestHeadersToLog` | `[]string` | | | `additionalResponseHeadersToLog` | `[]string` | | | `additionalResponseTrailersToLog` | `[]string` | | +| `filterStateObjectsToLog` | `[]string` | Additional filter state objects to log in filter_state_objects. Logger will call FilterState::Object::serializeAsProto to serialize the filter state object. See https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/access_loggers/grpc/v3/als.proto#extensions-access-loggers-grpc-v3-commongrpcaccesslogconfig. | diff --git a/install/helm/gloo/crds/gateway.solo.io_v1_Gateway.yaml b/install/helm/gloo/crds/gateway.solo.io_v1_Gateway.yaml index 8a6c8ea0a8e..5813771d379 100644 --- a/install/helm/gloo/crds/gateway.solo.io_v1_Gateway.yaml +++ b/install/helm/gloo/crds/gateway.solo.io_v1_Gateway.yaml @@ -6242,6 +6242,10 @@ spec: items: type: string type: array + filterStateObjectsToLog: + items: + type: string + type: array logName: type: string staticClusterName: @@ -6417,6 +6421,10 @@ spec: items: type: string type: array + filterStateObjectsToLog: + items: + type: string + type: array logName: type: string staticClusterName: diff --git a/install/helm/gloo/crds/gateway.solo.io_v1_ListenerOption.yaml b/install/helm/gloo/crds/gateway.solo.io_v1_ListenerOption.yaml index b2ad1f5017a..ed9b9af2522 100644 --- a/install/helm/gloo/crds/gateway.solo.io_v1_ListenerOption.yaml +++ b/install/helm/gloo/crds/gateway.solo.io_v1_ListenerOption.yaml @@ -180,6 +180,10 @@ spec: items: type: string type: array + filterStateObjectsToLog: + items: + type: string + type: array logName: type: string staticClusterName: @@ -355,6 +359,10 @@ spec: items: type: string type: array + filterStateObjectsToLog: + items: + type: string + type: array logName: type: string staticClusterName: diff --git a/install/helm/gloo/crds/gloo.solo.io_v1_Proxy.yaml b/install/helm/gloo/crds/gloo.solo.io_v1_Proxy.yaml index 31e53ff5801..2c57f25efdb 100644 --- a/install/helm/gloo/crds/gloo.solo.io_v1_Proxy.yaml +++ b/install/helm/gloo/crds/gloo.solo.io_v1_Proxy.yaml @@ -227,6 +227,10 @@ spec: items: type: string type: array + filterStateObjectsToLog: + items: + type: string + type: array logName: type: string staticClusterName: @@ -402,6 +406,10 @@ spec: items: type: string type: array + filterStateObjectsToLog: + items: + type: string + type: array logName: type: string staticClusterName: diff --git a/projects/accesslogger/pkg/runner/run.go b/projects/accesslogger/pkg/runner/run.go index a316adcdb16..58e81ef8617 100644 --- a/projects/accesslogger/pkg/runner/run.go +++ b/projects/accesslogger/pkg/runner/run.go @@ -2,6 +2,7 @@ package runner import ( "context" + "encoding/json" "fmt" "net" @@ -85,6 +86,8 @@ func Run() { case *pb.StreamAccessLogsMessage_HttpLogs: for _, v := range msg.HttpLogs.GetLogEntry() { + objJson, _ := json.MarshalIndent(v, "", "\t") + fmt.Printf("objJson: %s\n", string(objJson)) meta := v.GetCommonProperties().GetMetadata().GetFilterMetadata() // we could put any other kind of data into the transformation metadata, including more // detailed request info or info that gets dropped once translated into envoy config. For @@ -154,6 +157,7 @@ func Run() { zap.Any("start_time", v.GetCommonProperties().GetStartTime()), zap.Any("downstream_resp_time", downstreamRespTimeNs), zap.Any("upstream_resp_time", upstreamRespTimeNs), + zap.Any("filter_state_objects", v.GetCommonProperties().GetFilterStateObjects()), ).Info("received http request") } case *pb.StreamAccessLogsMessage_TcpLogs: diff --git a/projects/gloo/api/v1/options/als/als.proto b/projects/gloo/api/v1/options/als/als.proto index 50b7721b264..aae268e893c 100644 --- a/projects/gloo/api/v1/options/als/als.proto +++ b/projects/gloo/api/v1/options/als/als.proto @@ -63,6 +63,10 @@ message GrpcService { repeated string additional_response_headers_to_log = 5; repeated string additional_response_trailers_to_log = 6; + + // Additional filter state objects to log in filter_state_objects. Logger will call FilterState::Object::serializeAsProto to serialize the filter state object. + // See https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/access_loggers/grpc/v3/als.proto#extensions-access-loggers-grpc-v3-commongrpcaccesslogconfig + repeated string filter_state_objects_to_log = 7; } message AccessLogFilter { diff --git a/projects/gloo/pkg/api/v1/options/als/als.pb.clone.go b/projects/gloo/pkg/api/v1/options/als/als.pb.clone.go index b359211e64c..3b8b386effa 100644 --- a/projects/gloo/pkg/api/v1/options/als/als.pb.clone.go +++ b/projects/gloo/pkg/api/v1/options/als/als.pb.clone.go @@ -174,6 +174,15 @@ func (m *GrpcService) Clone() proto.Message { } } + if m.GetFilterStateObjectsToLog() != nil { + target.FilterStateObjectsToLog = make([]string, len(m.GetFilterStateObjectsToLog())) + for idx, v := range m.GetFilterStateObjectsToLog() { + + target.FilterStateObjectsToLog[idx] = v + + } + } + switch m.ServiceRef.(type) { case *GrpcService_StaticClusterName: diff --git a/projects/gloo/pkg/api/v1/options/als/als.pb.equal.go b/projects/gloo/pkg/api/v1/options/als/als.pb.equal.go index 214d49cfd73..08441ce3ee7 100644 --- a/projects/gloo/pkg/api/v1/options/als/als.pb.equal.go +++ b/projects/gloo/pkg/api/v1/options/als/als.pb.equal.go @@ -258,6 +258,17 @@ func (m *GrpcService) Equal(that interface{}) bool { } + if len(m.GetFilterStateObjectsToLog()) != len(target.GetFilterStateObjectsToLog()) { + return false + } + for idx, v := range m.GetFilterStateObjectsToLog() { + + if strings.Compare(v, target.GetFilterStateObjectsToLog()[idx]) != 0 { + return false + } + + } + switch m.ServiceRef.(type) { case *GrpcService_StaticClusterName: diff --git a/projects/gloo/pkg/api/v1/options/als/als.pb.go b/projects/gloo/pkg/api/v1/options/als/als.pb.go index 5a9a2d43074..83b87b4dd6d 100644 --- a/projects/gloo/pkg/api/v1/options/als/als.pb.go +++ b/projects/gloo/pkg/api/v1/options/als/als.pb.go @@ -425,8 +425,11 @@ type GrpcService struct { AdditionalRequestHeadersToLog []string `protobuf:"bytes,4,rep,name=additional_request_headers_to_log,json=additionalRequestHeadersToLog,proto3" json:"additional_request_headers_to_log,omitempty"` AdditionalResponseHeadersToLog []string `protobuf:"bytes,5,rep,name=additional_response_headers_to_log,json=additionalResponseHeadersToLog,proto3" json:"additional_response_headers_to_log,omitempty"` AdditionalResponseTrailersToLog []string `protobuf:"bytes,6,rep,name=additional_response_trailers_to_log,json=additionalResponseTrailersToLog,proto3" json:"additional_response_trailers_to_log,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // Additional filter state objects to log in filter_state_objects. Logger will call FilterState::Object::serializeAsProto to serialize the filter state object. + // See https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/access_loggers/grpc/v3/als.proto#extensions-access-loggers-grpc-v3-commongrpcaccesslogconfig + FilterStateObjectsToLog []string `protobuf:"bytes,7,rep,name=filter_state_objects_to_log,json=filterStateObjectsToLog,proto3" json:"filter_state_objects_to_log,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GrpcService) Reset() { @@ -503,6 +506,13 @@ func (x *GrpcService) GetAdditionalResponseTrailersToLog() []string { return nil } +func (x *GrpcService) GetFilterStateObjectsToLog() []string { + if x != nil { + return x.FilterStateObjectsToLog + } + return nil +} + type isGrpcService_ServiceRef interface { isGrpcService_ServiceRef() } @@ -1354,7 +1364,7 @@ var file_github_com_solo_io_gloo_projects_gloo_api_v1_options_als_als_proto_rawD 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x48, 0x00, 0x52, 0x0a, 0x6a, 0x73, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x42, 0x0f, 0x0a, 0x0d, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x6d, - 0x61, 0x74, 0x22, 0xcd, 0x02, 0x0a, 0x0b, 0x47, 0x72, 0x70, 0x63, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x61, 0x74, 0x22, 0x8b, 0x03, 0x0a, 0x0b, 0x47, 0x72, 0x70, 0x63, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6c, 0x6f, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6c, 0x6f, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x30, 0x0a, 0x13, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, @@ -1374,167 +1384,171 @@ var file_github_com_solo_io_gloo_projects_gloo_api_v1_options_als_als_proto_rawD 0x69, 0x6c, 0x65, 0x72, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x6c, 0x6f, 0x67, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x1f, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x72, 0x61, 0x69, 0x6c, 0x65, 0x72, 0x73, 0x54, 0x6f, - 0x4c, 0x6f, 0x67, 0x42, 0x0d, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x72, - 0x65, 0x66, 0x22, 0x84, 0x07, 0x0a, 0x0f, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x6f, 0x67, - 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x5a, 0x0a, 0x12, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x61, 0x6c, 0x73, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, - 0x52, 0x10, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x46, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x12, 0x53, 0x0a, 0x0f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x66, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x61, 0x6c, - 0x73, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, - 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0e, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x67, 0x0a, 0x17, 0x6e, 0x6f, 0x74, 0x5f, 0x68, - 0x65, 0x61, 0x6c, 0x74, 0x68, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x66, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x61, 0x6c, 0x73, 0x2e, 0x6f, + 0x4c, 0x6f, 0x67, 0x12, 0x3c, 0x0a, 0x1b, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x6c, + 0x6f, 0x67, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x17, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x54, 0x6f, 0x4c, 0x6f, + 0x67, 0x42, 0x0d, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x66, + 0x22, 0x84, 0x07, 0x0a, 0x0f, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x6f, 0x67, 0x46, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x12, 0x5a, 0x0a, 0x12, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x63, + 0x6f, 0x64, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2a, 0x2e, 0x61, 0x6c, 0x73, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, + 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x10, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x12, 0x53, 0x0a, 0x0f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x61, 0x6c, 0x73, 0x2e, + 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, + 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0e, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x67, 0x0a, 0x17, 0x6e, 0x6f, 0x74, 0x5f, 0x68, 0x65, 0x61, + 0x6c, 0x74, 0x68, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x61, 0x6c, 0x73, 0x2e, 0x6f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, + 0x6f, 0x2e, 0x4e, 0x6f, 0x74, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x14, 0x6e, 0x6f, 0x74, 0x48, 0x65, 0x61, + 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x56, + 0x0a, 0x10, 0x74, 0x72, 0x61, 0x63, 0x65, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x61, 0x6c, 0x73, 0x2e, 0x6f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, + 0x2e, 0x69, 0x6f, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x65, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x61, 0x62, 0x6c, 0x65, + 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x50, 0x0a, 0x0e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, + 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, + 0x2e, 0x61, 0x6c, 0x73, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, + 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, + 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0d, 0x72, 0x75, 0x6e, 0x74, 0x69, + 0x6d, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x44, 0x0a, 0x0a, 0x61, 0x6e, 0x64, 0x5f, + 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x61, + 0x6c, 0x73, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, + 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x41, 0x6e, 0x64, 0x46, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x48, 0x00, 0x52, 0x09, 0x61, 0x6e, 0x64, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x41, + 0x0a, 0x09, 0x6f, 0x72, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x6c, 0x73, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x4f, 0x72, 0x46, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x08, 0x6f, 0x72, 0x46, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x12, 0x4d, 0x0a, 0x0d, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x66, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x6c, 0x73, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, - 0x2e, 0x69, 0x6f, 0x2e, 0x4e, 0x6f, 0x74, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x14, 0x6e, 0x6f, 0x74, 0x48, - 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x12, 0x56, 0x0a, 0x10, 0x74, 0x72, 0x61, 0x63, 0x65, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x66, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x61, 0x6c, 0x73, - 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, - 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x65, 0x61, 0x62, 0x6c, 0x65, 0x46, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x61, 0x62, - 0x6c, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x50, 0x0a, 0x0e, 0x72, 0x75, 0x6e, 0x74, - 0x69, 0x6d, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x27, 0x2e, 0x61, 0x6c, 0x73, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, - 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x52, 0x75, 0x6e, 0x74, - 0x69, 0x6d, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0d, 0x72, 0x75, 0x6e, - 0x74, 0x69, 0x6d, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x44, 0x0a, 0x0a, 0x61, 0x6e, - 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, + 0x2e, 0x69, 0x6f, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x48, 0x00, 0x52, 0x0c, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x12, 0x60, 0x0a, 0x14, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x66, 0x6c, 0x61, + 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, + 0x2e, 0x61, 0x6c, 0x73, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, + 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x12, + 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x12, 0x5a, 0x0a, 0x12, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x61, 0x6c, 0x73, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, - 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x41, 0x6e, 0x64, 0x46, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x09, 0x61, 0x6e, 0x64, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x12, 0x41, 0x0a, 0x09, 0x6f, 0x72, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x6c, 0x73, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x4f, - 0x72, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x08, 0x6f, 0x72, 0x46, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x12, 0x4d, 0x0a, 0x0d, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x66, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x6c, 0x73, - 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, - 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x48, 0x00, 0x52, 0x0c, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x12, 0x60, 0x0a, 0x14, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x66, - 0x6c, 0x61, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2c, 0x2e, 0x61, 0x6c, 0x73, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, - 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, - 0x52, 0x12, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x46, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x12, 0x5a, 0x0a, 0x12, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, + 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x10, 0x67, 0x72, + 0x70, 0x63, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x17, + 0x0a, 0x10, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, + 0x65, 0x72, 0x12, 0x03, 0xf8, 0x42, 0x01, 0x22, 0xc6, 0x01, 0x0a, 0x10, 0x43, 0x6f, 0x6d, 0x70, + 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x47, 0x0a, 0x02, + 0x6f, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x61, 0x6c, 0x73, 0x2e, 0x6f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, + 0x2e, 0x69, 0x6f, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x46, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x4f, 0x70, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x10, + 0x01, 0x52, 0x02, 0x6f, 0x70, 0x12, 0x4b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x65, + 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x76, 0x33, 0x2e, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x55, 0x49, 0x6e, 0x74, 0x33, + 0x32, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x22, 0x1c, 0x0a, 0x02, 0x4f, 0x70, 0x12, 0x06, 0x0a, 0x02, 0x45, 0x51, 0x10, 0x00, + 0x12, 0x06, 0x0a, 0x02, 0x47, 0x45, 0x10, 0x01, 0x12, 0x06, 0x0a, 0x02, 0x4c, 0x45, 0x10, 0x02, + 0x22, 0x68, 0x0a, 0x10, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x46, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x12, 0x54, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, + 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x61, 0x6c, 0x73, 0x2e, 0x6f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, + 0x2e, 0x69, 0x6f, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x46, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0a, + 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x22, 0x66, 0x0a, 0x0e, 0x44, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x54, 0x0a, 0x0a, + 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x61, 0x6c, 0x73, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, - 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x47, 0x72, 0x70, 0x63, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x10, - 0x67, 0x72, 0x70, 0x63, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x42, 0x17, 0x0a, 0x10, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x69, - 0x66, 0x69, 0x65, 0x72, 0x12, 0x03, 0xf8, 0x42, 0x01, 0x22, 0xc6, 0x01, 0x0a, 0x10, 0x43, 0x6f, - 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x47, - 0x0a, 0x02, 0x6f, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x61, 0x6c, 0x73, - 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, - 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, - 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x4f, 0x70, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, - 0x02, 0x10, 0x01, 0x52, 0x02, 0x6f, 0x70, 0x12, 0x4b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, - 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x76, 0x33, 0x2e, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x55, 0x49, 0x6e, - 0x74, 0x33, 0x32, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x22, 0x1c, 0x0a, 0x02, 0x4f, 0x70, 0x12, 0x06, 0x0a, 0x02, 0x45, 0x51, - 0x10, 0x00, 0x12, 0x06, 0x0a, 0x02, 0x47, 0x45, 0x10, 0x01, 0x12, 0x06, 0x0a, 0x02, 0x4c, 0x45, - 0x10, 0x02, 0x22, 0x68, 0x0a, 0x10, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, - 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x54, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, - 0x69, 0x73, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x61, 0x6c, 0x73, - 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, - 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, - 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, - 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x22, 0x66, 0x0a, 0x0e, - 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x54, - 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x61, 0x6c, 0x73, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x43, 0x6f, - 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x08, - 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, - 0x69, 0x73, 0x6f, 0x6e, 0x22, 0x16, 0x0a, 0x14, 0x4e, 0x6f, 0x74, 0x48, 0x65, 0x61, 0x6c, 0x74, - 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x11, 0x0a, 0x0f, - 0x54, 0x72, 0x61, 0x63, 0x65, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, - 0xca, 0x01, 0x0a, 0x0d, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x12, 0x28, 0x0a, 0x0b, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, - 0x0a, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x51, 0x0a, 0x0f, 0x70, - 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x65, - 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x76, 0x33, 0x2e, 0x46, 0x72, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x52, 0x0e, - 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x64, 0x12, 0x3c, - 0x0a, 0x1a, 0x75, 0x73, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, - 0x74, 0x5f, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x6e, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x18, 0x75, 0x73, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, - 0x6e, 0x74, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x6e, 0x65, 0x73, 0x73, 0x22, 0x5a, 0x0a, 0x09, - 0x41, 0x6e, 0x64, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x4d, 0x0a, 0x07, 0x66, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x61, 0x6c, 0x73, - 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, - 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x6f, 0x67, 0x46, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x02, 0x52, - 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x22, 0x59, 0x0a, 0x08, 0x4f, 0x72, 0x46, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x12, 0x4d, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x61, 0x6c, 0x73, 0x2e, 0x6f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, - 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x6f, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x02, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x73, 0x22, 0x5e, 0x0a, 0x0c, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x46, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x12, 0x4e, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x65, 0x6e, - 0x76, 0x6f, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, - 0x2e, 0x76, 0x33, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, - 0x72, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x68, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x22, 0xae, 0x01, 0x0a, 0x12, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x46, 0x6c, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x97, 0x01, 0x0a, 0x05, 0x66, - 0x6c, 0x61, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x42, 0x80, 0x01, 0xfa, 0x42, 0x7d, - 0x92, 0x01, 0x7a, 0x22, 0x78, 0x72, 0x76, 0x52, 0x02, 0x4c, 0x48, 0x52, 0x02, 0x55, 0x48, 0x52, - 0x02, 0x55, 0x54, 0x52, 0x02, 0x4c, 0x52, 0x52, 0x02, 0x55, 0x52, 0x52, 0x02, 0x55, 0x46, 0x52, - 0x02, 0x55, 0x43, 0x52, 0x02, 0x55, 0x4f, 0x52, 0x02, 0x4e, 0x52, 0x52, 0x02, 0x44, 0x49, 0x52, - 0x02, 0x46, 0x49, 0x52, 0x02, 0x52, 0x4c, 0x52, 0x04, 0x55, 0x41, 0x45, 0x58, 0x52, 0x04, 0x52, - 0x4c, 0x53, 0x45, 0x52, 0x02, 0x44, 0x43, 0x52, 0x03, 0x55, 0x52, 0x58, 0x52, 0x02, 0x53, 0x49, - 0x52, 0x02, 0x49, 0x48, 0x52, 0x03, 0x44, 0x50, 0x45, 0x52, 0x05, 0x55, 0x4d, 0x53, 0x44, 0x52, - 0x52, 0x04, 0x52, 0x46, 0x43, 0x46, 0x52, 0x04, 0x4e, 0x46, 0x43, 0x46, 0x52, 0x02, 0x44, 0x54, - 0x52, 0x03, 0x55, 0x50, 0x45, 0x52, 0x02, 0x4e, 0x43, 0x52, 0x02, 0x4f, 0x4d, 0x52, 0x05, 0x66, - 0x6c, 0x61, 0x67, 0x73, 0x22, 0xc5, 0x03, 0x0a, 0x10, 0x47, 0x72, 0x70, 0x63, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x5c, 0x0a, 0x08, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x61, 0x6c, - 0x73, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, - 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x0d, - 0xfa, 0x42, 0x0a, 0x92, 0x01, 0x07, 0x22, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78, 0x63, 0x6c, 0x75, - 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, - 0x65, 0x22, 0xb8, 0x02, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x06, 0x0a, 0x02, - 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x45, 0x44, - 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x02, 0x12, - 0x14, 0x0a, 0x10, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x41, 0x52, 0x47, 0x55, 0x4d, - 0x45, 0x4e, 0x54, 0x10, 0x03, 0x12, 0x15, 0x0a, 0x11, 0x44, 0x45, 0x41, 0x44, 0x4c, 0x49, 0x4e, - 0x45, 0x5f, 0x45, 0x58, 0x43, 0x45, 0x45, 0x44, 0x45, 0x44, 0x10, 0x04, 0x12, 0x0d, 0x0a, 0x09, - 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x05, 0x12, 0x12, 0x0a, 0x0e, 0x41, - 0x4c, 0x52, 0x45, 0x41, 0x44, 0x59, 0x5f, 0x45, 0x58, 0x49, 0x53, 0x54, 0x53, 0x10, 0x06, 0x12, - 0x15, 0x0a, 0x11, 0x50, 0x45, 0x52, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, - 0x4e, 0x49, 0x45, 0x44, 0x10, 0x07, 0x12, 0x16, 0x0a, 0x12, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, - 0x43, 0x45, 0x5f, 0x45, 0x58, 0x48, 0x41, 0x55, 0x53, 0x54, 0x45, 0x44, 0x10, 0x08, 0x12, 0x17, - 0x0a, 0x13, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x50, 0x52, 0x45, 0x43, 0x4f, 0x4e, 0x44, - 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x09, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x42, 0x4f, 0x52, 0x54, - 0x45, 0x44, 0x10, 0x0a, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x55, 0x54, 0x5f, 0x4f, 0x46, 0x5f, 0x52, - 0x41, 0x4e, 0x47, 0x45, 0x10, 0x0b, 0x12, 0x11, 0x0a, 0x0d, 0x55, 0x4e, 0x49, 0x4d, 0x50, 0x4c, - 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x45, 0x44, 0x10, 0x0c, 0x12, 0x0c, 0x0a, 0x08, 0x49, 0x4e, 0x54, - 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x10, 0x0d, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x41, 0x56, 0x41, - 0x49, 0x4c, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x0e, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x41, 0x54, 0x41, - 0x5f, 0x4c, 0x4f, 0x53, 0x53, 0x10, 0x0f, 0x12, 0x13, 0x0a, 0x0f, 0x55, 0x4e, 0x41, 0x55, 0x54, - 0x48, 0x45, 0x4e, 0x54, 0x49, 0x43, 0x41, 0x54, 0x45, 0x44, 0x10, 0x10, 0x42, 0x4a, 0xb8, 0xf5, - 0x04, 0x01, 0xc0, 0xf5, 0x04, 0x01, 0xd0, 0xf5, 0x04, 0x01, 0x5a, 0x3c, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x6f, 0x6c, 0x6f, 0x2d, 0x69, 0x6f, 0x2f, 0x67, - 0x6c, 0x6f, 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x67, 0x6c, 0x6f, - 0x6f, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x6c, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x43, 0x6f, 0x6d, 0x70, + 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x08, 0xfa, 0x42, + 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, + 0x6f, 0x6e, 0x22, 0x16, 0x0a, 0x14, 0x4e, 0x6f, 0x74, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x11, 0x0a, 0x0f, 0x54, 0x72, + 0x61, 0x63, 0x65, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0xca, 0x01, + 0x0a, 0x0d, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, + 0x28, 0x0a, 0x0b, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x72, + 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x51, 0x0a, 0x0f, 0x70, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x65, 0x6e, 0x76, + 0x6f, 0x79, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x76, 0x33, 0x2e, 0x46, 0x72, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x70, 0x65, + 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x64, 0x12, 0x3c, 0x0a, 0x1a, + 0x75, 0x73, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x5f, + 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x6e, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x18, 0x75, 0x73, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x74, + 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x6e, 0x65, 0x73, 0x73, 0x22, 0x5a, 0x0a, 0x09, 0x41, 0x6e, + 0x64, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x4d, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x61, 0x6c, 0x73, 0x2e, 0x6f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, + 0x2e, 0x69, 0x6f, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x6f, 0x67, 0x46, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x02, 0x52, 0x07, 0x66, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x22, 0x59, 0x0a, 0x08, 0x4f, 0x72, 0x46, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x12, 0x4d, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x61, 0x6c, 0x73, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x41, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x6f, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x08, + 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x02, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x73, 0x22, 0x5e, 0x0a, 0x0c, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x12, 0x4e, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2c, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x65, 0x6e, 0x76, 0x6f, + 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x76, + 0x33, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x72, 0x42, + 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x22, 0xae, 0x01, 0x0a, 0x12, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x46, 0x6c, + 0x61, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x97, 0x01, 0x0a, 0x05, 0x66, 0x6c, 0x61, + 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x42, 0x80, 0x01, 0xfa, 0x42, 0x7d, 0x92, 0x01, + 0x7a, 0x22, 0x78, 0x72, 0x76, 0x52, 0x02, 0x4c, 0x48, 0x52, 0x02, 0x55, 0x48, 0x52, 0x02, 0x55, + 0x54, 0x52, 0x02, 0x4c, 0x52, 0x52, 0x02, 0x55, 0x52, 0x52, 0x02, 0x55, 0x46, 0x52, 0x02, 0x55, + 0x43, 0x52, 0x02, 0x55, 0x4f, 0x52, 0x02, 0x4e, 0x52, 0x52, 0x02, 0x44, 0x49, 0x52, 0x02, 0x46, + 0x49, 0x52, 0x02, 0x52, 0x4c, 0x52, 0x04, 0x55, 0x41, 0x45, 0x58, 0x52, 0x04, 0x52, 0x4c, 0x53, + 0x45, 0x52, 0x02, 0x44, 0x43, 0x52, 0x03, 0x55, 0x52, 0x58, 0x52, 0x02, 0x53, 0x49, 0x52, 0x02, + 0x49, 0x48, 0x52, 0x03, 0x44, 0x50, 0x45, 0x52, 0x05, 0x55, 0x4d, 0x53, 0x44, 0x52, 0x52, 0x04, + 0x52, 0x46, 0x43, 0x46, 0x52, 0x04, 0x4e, 0x46, 0x43, 0x46, 0x52, 0x02, 0x44, 0x54, 0x52, 0x03, + 0x55, 0x50, 0x45, 0x52, 0x02, 0x4e, 0x43, 0x52, 0x02, 0x4f, 0x4d, 0x52, 0x05, 0x66, 0x6c, 0x61, + 0x67, 0x73, 0x22, 0xc5, 0x03, 0x0a, 0x10, 0x47, 0x72, 0x70, 0x63, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x5c, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x61, 0x6c, 0x73, 0x2e, + 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, + 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x46, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x0d, 0xfa, 0x42, + 0x0a, 0x92, 0x01, 0x07, 0x22, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x22, + 0xb8, 0x02, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, + 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x45, 0x44, 0x10, 0x01, + 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x02, 0x12, 0x14, 0x0a, + 0x10, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x41, 0x52, 0x47, 0x55, 0x4d, 0x45, 0x4e, + 0x54, 0x10, 0x03, 0x12, 0x15, 0x0a, 0x11, 0x44, 0x45, 0x41, 0x44, 0x4c, 0x49, 0x4e, 0x45, 0x5f, + 0x45, 0x58, 0x43, 0x45, 0x45, 0x44, 0x45, 0x44, 0x10, 0x04, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, + 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x05, 0x12, 0x12, 0x0a, 0x0e, 0x41, 0x4c, 0x52, + 0x45, 0x41, 0x44, 0x59, 0x5f, 0x45, 0x58, 0x49, 0x53, 0x54, 0x53, 0x10, 0x06, 0x12, 0x15, 0x0a, + 0x11, 0x50, 0x45, 0x52, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x4e, 0x49, + 0x45, 0x44, 0x10, 0x07, 0x12, 0x16, 0x0a, 0x12, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, + 0x5f, 0x45, 0x58, 0x48, 0x41, 0x55, 0x53, 0x54, 0x45, 0x44, 0x10, 0x08, 0x12, 0x17, 0x0a, 0x13, + 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x50, 0x52, 0x45, 0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, + 0x49, 0x4f, 0x4e, 0x10, 0x09, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x42, 0x4f, 0x52, 0x54, 0x45, 0x44, + 0x10, 0x0a, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x55, 0x54, 0x5f, 0x4f, 0x46, 0x5f, 0x52, 0x41, 0x4e, + 0x47, 0x45, 0x10, 0x0b, 0x12, 0x11, 0x0a, 0x0d, 0x55, 0x4e, 0x49, 0x4d, 0x50, 0x4c, 0x45, 0x4d, + 0x45, 0x4e, 0x54, 0x45, 0x44, 0x10, 0x0c, 0x12, 0x0c, 0x0a, 0x08, 0x49, 0x4e, 0x54, 0x45, 0x52, + 0x4e, 0x41, 0x4c, 0x10, 0x0d, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x41, 0x56, 0x41, 0x49, 0x4c, + 0x41, 0x42, 0x4c, 0x45, 0x10, 0x0e, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x4c, + 0x4f, 0x53, 0x53, 0x10, 0x0f, 0x12, 0x13, 0x0a, 0x0f, 0x55, 0x4e, 0x41, 0x55, 0x54, 0x48, 0x45, + 0x4e, 0x54, 0x49, 0x43, 0x41, 0x54, 0x45, 0x44, 0x10, 0x10, 0x42, 0x4a, 0xb8, 0xf5, 0x04, 0x01, + 0xc0, 0xf5, 0x04, 0x01, 0xd0, 0xf5, 0x04, 0x01, 0x5a, 0x3c, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x6f, 0x6c, 0x6f, 0x2d, 0x69, 0x6f, 0x2f, 0x67, 0x6c, 0x6f, + 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x67, 0x6c, 0x6f, 0x6f, 0x2f, + 0x70, 0x6b, 0x67, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2f, 0x61, 0x6c, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, }) var ( diff --git a/projects/gloo/pkg/api/v1/options/als/als.pb.hash.go b/projects/gloo/pkg/api/v1/options/als/als.pb.hash.go index e6c04ab56cf..e2398039ffe 100644 --- a/projects/gloo/pkg/api/v1/options/als/als.pb.hash.go +++ b/projects/gloo/pkg/api/v1/options/als/als.pb.hash.go @@ -258,6 +258,14 @@ func (m *GrpcService) Hash(hasher hash.Hash64) (uint64, error) { } + for _, v := range m.GetFilterStateObjectsToLog() { + + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + switch m.ServiceRef.(type) { case *GrpcService_StaticClusterName: diff --git a/projects/gloo/pkg/api/v1/options/als/als.pb.uniquehash.go b/projects/gloo/pkg/api/v1/options/als/als.pb.uniquehash.go index a5b144f62db..d42fe55417a 100644 --- a/projects/gloo/pkg/api/v1/options/als/als.pb.uniquehash.go +++ b/projects/gloo/pkg/api/v1/options/als/als.pb.uniquehash.go @@ -298,6 +298,23 @@ func (m *GrpcService) HashUnique(hasher hash.Hash64) (uint64, error) { } + if _, err = hasher.Write([]byte("FilterStateObjectsToLog")); err != nil { + return 0, err + } + for i, v := range m.GetFilterStateObjectsToLog() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + switch m.ServiceRef.(type) { case *GrpcService_StaticClusterName: diff --git a/projects/gloo/pkg/plugins/als/converter.go b/projects/gloo/pkg/plugins/als/converter.go index 018e2685d44..a7ec6ce7625 100644 --- a/projects/gloo/pkg/plugins/als/converter.go +++ b/projects/gloo/pkg/plugins/als/converter.go @@ -251,9 +251,10 @@ func copyGrpcSettings(cfg *envoygrpc.HttpGrpcAccessLogConfig, alsSettings *als.A cfg.AdditionalResponseHeadersToLog = alsSettings.GrpcService.GetAdditionalResponseHeadersToLog() cfg.AdditionalResponseTrailersToLog = alsSettings.GrpcService.GetAdditionalResponseTrailersToLog() cfg.CommonConfig = &envoygrpc.CommonGrpcAccessLogConfig{ - LogName: alsSettings.GrpcService.GetLogName(), - GrpcService: svc, - TransportApiVersion: envoycore.ApiVersion_V3, + LogName: alsSettings.GrpcService.GetLogName(), + GrpcService: svc, + TransportApiVersion: envoycore.ApiVersion_V3, + FilterStateObjectsToLog: alsSettings.GrpcService.GetFilterStateObjectsToLog(), } return cfg.Validate() } diff --git a/projects/gloo/pkg/plugins/als/plugin_test.go b/projects/gloo/pkg/plugins/als/plugin_test.go index 21af7d8946d..5f76fad2a85 100644 --- a/projects/gloo/pkg/plugins/als/plugin_test.go +++ b/projects/gloo/pkg/plugins/als/plugin_test.go @@ -49,17 +49,19 @@ var _ = Describe("Plugin", func() { // to make sure we copied/pasted correctly and that no changes made to the Envoy definitions broke anything Describe("Test each Filter", func() { var ( - alsSettings *accessLogService.AccessLoggingService - logName string - extraHeaders []string - usRef *core.ResourceRef - accessLogConfigs []*envoyal.AccessLog - err error + alsSettings *accessLogService.AccessLoggingService + logName string + extraHeaders []string + filterStateObjectsToLog []string + usRef *core.ResourceRef + accessLogConfigs []*envoyal.AccessLog + err error ) BeforeEach(func() { logName = "test" extraHeaders = []string{"test"} + filterStateObjectsToLog = []string{"filtertest"} usRef = &core.ResourceRef{ Name: "default", Namespace: "default", @@ -77,6 +79,7 @@ var _ = Describe("Plugin", func() { AdditionalRequestHeadersToLog: extraHeaders, AdditionalResponseHeadersToLog: extraHeaders, AdditionalResponseTrailersToLog: extraHeaders, + FilterStateObjectsToLog: filterStateObjectsToLog, }, }, }, @@ -96,6 +99,7 @@ var _ = Describe("Plugin", func() { Expect(falCfg.AdditionalResponseHeadersToLog).To(Equal(extraHeaders)) Expect(falCfg.AdditionalResponseTrailersToLog).To(Equal(extraHeaders)) Expect(falCfg.CommonConfig.LogName).To(Equal(logName)) + Expect(falCfg.CommonConfig.FilterStateObjectsToLog).To(Equal(filterStateObjectsToLog)) envoyGrpc := falCfg.CommonConfig.GetGrpcService().GetEnvoyGrpc() Expect(envoyGrpc).NotTo(BeNil()) Expect(envoyGrpc.ClusterName).To(Equal(translatorutil.UpstreamToClusterName(usRef))) diff --git a/test/e2e/access_log_test.go b/test/e2e/access_log_test.go index b2c163b73ce..b62139d5bbf 100644 --- a/test/e2e/access_log_test.go +++ b/test/e2e/access_log_test.go @@ -2,15 +2,18 @@ package e2e_test import ( "context" + "fmt" "net/http" "time" + "github.com/solo-io/gloo/test/helpers" "github.com/solo-io/gloo/test/testutils" "github.com/solo-io/gloo/test/gomega/matchers" envoy_data_accesslog_v3 "github.com/envoyproxy/go-control-plane/envoy/data/accesslog/v3" v1 "github.com/solo-io/gloo/projects/gateway/pkg/api/v1" + "github.com/solo-io/gloo/test/e2e" envoyals "github.com/envoyproxy/go-control-plane/envoy/service/accesslog/v3" @@ -25,6 +28,7 @@ import ( gloov1 "github.com/solo-io/gloo/projects/gloo/pkg/api/v1" "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/als" + "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/dynamic_forward_proxy" alsplugin "github.com/solo-io/gloo/projects/gloo/pkg/plugins/als" "github.com/solo-io/gloo/projects/gloo/pkg/translator" ) @@ -112,6 +116,105 @@ var _ = Describe("Access Log", func() { }) + FContext("Grpc with filter state objects", func() { + + var ( + msgChan <-chan *envoy_data_accesslog_v3.HTTPAccessLogEntry + ) + + BeforeEach(func() { + msgChan = runAccessLog(testContext.Ctx(), testContext.EnvoyInstance().AccessLogPort) + + gw := gwdefaults.DefaultGateway(writeNamespace) + gw.Options = &gloov1.ListenerOptions{ + AccessLoggingService: &als.AccessLoggingService{ + AccessLog: []*als.AccessLog{ + { + OutputDestination: &als.AccessLog_GrpcService{ + GrpcService: &als.GrpcService{ + LogName: "test-log", + ServiceRef: &als.GrpcService_StaticClusterName{ + StaticClusterName: alsplugin.ClusterName, + }, + FilterStateObjectsToLog: []string{ + "envoy.network.upstream_server_name", + "envoy.network.application_protocols", + "envoy.network.upstream_subject_alt_names", + "envoy.tcp_proxy.cluster", + "envoy.udp_proxy.cluster", + "envoy.network.transport_socket.original_dst_address", + "envoy.filters.listener.original_dst.local_ip", + "envoy.filters.listener.original_dst.remote_ip", + "envoy.upstream.dynamic_host", + "envoy.upstream.dynamic_port", + "envoy.tcp_proxy.disable_tunneling", + "envoy.filters.network.http_connection_manager.local_reply_owner", + "envoy.string", + "envoy.tcp_proxy.per_connection_idle_timeout_ms", + "envoy.ratelimit.hits_addend", + }, + }, + }, + }, + }, + }, + } + + // enable dynamic forward proxy to save upstream address in filter state + gw.GetHttpGateway().Options = &gloov1.HttpListenerOptions{ + DynamicForwardProxy: &dynamic_forward_proxy.FilterConfig{ + SaveUpstreamAddress: true, + }, // pick up system defaults to resolve DNS + } + + testContext.ResourcesToCreate().Gateways = v1.GatewayList{ + gw, + } + + vs := helpers.NewVirtualServiceBuilder(). + WithName(e2e.DefaultVirtualServiceName). + WithNamespace(writeNamespace). + WithDomain(e2e.DefaultHost). + WithRoutePrefixMatcher(e2e.DefaultRouteName, "/"). + WithRouteAction(e2e.DefaultRouteName, &gloov1.RouteAction{ + Destination: &gloov1.RouteAction_DynamicForwardProxy{ + DynamicForwardProxy: &dynamic_forward_proxy.PerRouteConfig{ + HostRewriteSpecifier: &dynamic_forward_proxy.PerRouteConfig_AutoHostRewriteHeader{ + AutoHostRewriteHeader: "x-rewrite-me", + }, + }, + }, + }). + Build() + + testContext.ResourcesToCreate().VirtualServices = v1.VirtualServiceList{ + vs, + } + }) + + It("can stream access logs with filter state objects", func() { + requestBuilder := testContext.GetHttpRequestBuilder(). + WithPath("get"). + WithHeader("x-rewrite-me", "postman-echo.com") + + Eventually(func(g Gomega) { + g.Expect(testutils.DefaultHttpClient.Do(requestBuilder.Build())).Should(matchers.HaveHttpResponse(&matchers.HttpResponse{ + StatusCode: http.StatusOK, + Body: ContainSubstring(`"host": "postman-echo.com"`), + })) + + var entry *envoy_data_accesslog_v3.HTTPAccessLogEntry + g.Eventually(msgChan, 2*time.Second).Should(Receive(&entry)) + + fmt.Printf("entry.CommonProperties.UpstreamCluster: %s\n", entry.CommonProperties.UpstreamCluster) + fmt.Printf("entry.CommonProperties.FilterStateObjects: %+v\n", entry.CommonProperties.FilterStateObjects) + g.Expect(entry.CommonProperties.UpstreamCluster).To(Equal("solo_io_generated_dfp:13273938298451159843")) + g.Expect(entry.CommonProperties.FilterStateObjects).To(ContainSubstring(`"upstream_remote_address":"10.244.0.1:80"`)) + }, time.Second*21, time.Second*2).Should(Succeed()) + }) + + }) + Context("File", func() { var gw *v1.Gateway Context("String Format", func() { From 03f01f3a9b08997dd087c9cc2e8c9f05303990c3 Mon Sep 17 00:00:00 2001 From: sheidkamp Date: Fri, 7 Mar 2025 09:38:34 -0500 Subject: [PATCH 2/7] hacking in set-filter-state --- .../api/v1/http_listener_options.proto.sk.md | 2 + .../set_filter_state.proto.sk.md | 88 +++ .../gloo/api/v1/route_options.proto.sk.md | 2 + .../api/v1/virtual_host_options.proto.sk.md | 2 + docs/data/ProtoMap.yaml | 6 + .../gloo/crds/gateway.solo.io_v1_Gateway.yaml | 38 ++ ...gateway.solo.io_v1_HttpListenerOption.yaml | 19 + ...teway.solo.io_v1_MatchableHttpGateway.yaml | 19 + .../crds/gateway.solo.io_v1_RouteOption.yaml | 19 + .../crds/gateway.solo.io_v1_RouteTable.yaml | 19 + .../gateway.solo.io_v1_VirtualHostOption.yaml | 19 + .../gateway.solo.io_v1_VirtualService.yaml | 38 ++ .../core/v3/substitution_format_string.xproto | 103 ++++ .../gloo/api/v1/http_listener_options.proto | 4 + .../set_filter_state/set_filter_state.proto | 62 +++ projects/gloo/api/v1/route_options.proto | 4 + .../gloo/api/v1/virtual_host_options.proto | 6 +- .../api/v1/http_listener_options.pb.clone.go | 8 + .../api/v1/http_listener_options.pb.equal.go | 10 + .../pkg/api/v1/http_listener_options.pb.go | 324 ++++++----- .../api/v1/http_listener_options.pb.hash.go | 20 + .../v1/http_listener_options.pb.uniquehash.go | 20 + .../set_filter_state/set_filter_state.pb.go | 344 ++++++++++++ .../gloo/pkg/api/v1/route_options.pb.clone.go | 8 + .../gloo/pkg/api/v1/route_options.pb.equal.go | 10 + projects/gloo/pkg/api/v1/route_options.pb.go | 524 +++++++++--------- .../gloo/pkg/api/v1/route_options.pb.hash.go | 20 + .../pkg/api/v1/route_options.pb.uniquehash.go | 20 + .../api/v1/virtual_host_options.pb.clone.go | 8 + .../api/v1/virtual_host_options.pb.equal.go | 10 + .../pkg/api/v1/virtual_host_options.pb.go | 335 +++++------ .../api/v1/virtual_host_options.pb.hash.go | 20 + .../v1/virtual_host_options.pb.uniquehash.go | 20 + .../gloo/pkg/plugins/registry/registry.go | 2 + .../pkg/plugins/set_filter_state/plugin.go | 165 ++++++ projects/gloo/pkg/translator/route_config.go | 4 + test/e2e/access_log_test.go | 74 +-- 37 files changed, 1789 insertions(+), 607 deletions(-) create mode 100644 docs/content/reference/api/github.com/solo-io/gloo/projects/gloo/api/v1/options/set_filter_state/set_filter_state.proto.sk.md create mode 100644 projects/gloo/api/external/envoy/config/core/v3/substitution_format_string.xproto create mode 100644 projects/gloo/api/v1/options/set_filter_state/set_filter_state.proto create mode 100644 projects/gloo/pkg/api/v1/options/set_filter_state/set_filter_state.pb.go create mode 100644 projects/gloo/pkg/plugins/set_filter_state/plugin.go diff --git a/docs/content/reference/api/github.com/solo-io/gloo/projects/gloo/api/v1/http_listener_options.proto.sk.md b/docs/content/reference/api/github.com/solo-io/gloo/projects/gloo/api/v1/http_listener_options.proto.sk.md index b70555203b0..9712040f776 100644 --- a/docs/content/reference/api/github.com/solo-io/gloo/projects/gloo/api/v1/http_listener_options.proto.sk.md +++ b/docs/content/reference/api/github.com/solo-io/gloo/projects/gloo/api/v1/http_listener_options.proto.sk.md @@ -56,6 +56,7 @@ Optional, feature-specific configuration that lives on http listeners "tap": .tap.options.gloo.solo.io.Tap "statefulSession": .stateful_session.options.gloo.solo.io.StatefulSession "headerValidationSettings": .header_validation.options.gloo.solo.io.HeaderValidationSettings +"setFilterState": .set_filter_state.options.gloo.solo.io.SetFilterState ``` @@ -88,6 +89,7 @@ Optional, feature-specific configuration that lives on http listeners | `tap` | [.tap.options.gloo.solo.io.Tap](../enterprise/options/tap/tap.proto.sk/#tap) | Enterprise only: Tap filter settings (experimental). | | `statefulSession` | [.stateful_session.options.gloo.solo.io.StatefulSession](../enterprise/options/stateful_session/stateful_session.proto.sk/#statefulsession) | Enterprise only: Listener-level stateful session settings. | | `headerValidationSettings` | [.header_validation.options.gloo.solo.io.HeaderValidationSettings](../options/header_validation/header_validation.proto.sk/#headervalidationsettings) | Header validation settings - fields in this message can be used to determine whether requests should be rejected based on the contents of the header. | +| `setFilterState` | [.set_filter_state.options.gloo.solo.io.SetFilterState](../options/set_filter_state/set_filter_state.proto.sk/#setfilterstate) | Set-Filter-State settings. | diff --git a/docs/content/reference/api/github.com/solo-io/gloo/projects/gloo/api/v1/options/set_filter_state/set_filter_state.proto.sk.md b/docs/content/reference/api/github.com/solo-io/gloo/projects/gloo/api/v1/options/set_filter_state/set_filter_state.proto.sk.md new file mode 100644 index 00000000000..d058ef7b25f --- /dev/null +++ b/docs/content/reference/api/github.com/solo-io/gloo/projects/gloo/api/v1/options/set_filter_state/set_filter_state.proto.sk.md @@ -0,0 +1,88 @@ + +--- +title: "SetFilterState" +weight: 5 +--- + + + + +### Package: `set_filter_state.options.gloo.solo.io` +**Types:** + + +- [SetFilterState](#setfilterstate) +- [FilterStateValue](#filterstatevalue) +- [SharedWithUpstream](#sharedwithupstream) + + + + +**Source File: [github.com/solo-io/gloo/projects/gloo/api/v1/options/set_filter_state/set_filter_state.proto](https://github.com/solo-io/gloo/blob/main/projects/gloo/api/v1/options/set_filter_state/set_filter_state.proto)** + + + + + +--- +### SetFilterState + + +Configuration for the Set-Filter-State HTTP Filter + +```yaml +"onRequestHeaders": []set_filter_state.options.gloo.solo.io.FilterStateValue + +``` + +| Field | Type | Description | +| ----- | ---- | ----------- | +| `onRequestHeaders` | [[]set_filter_state.options.gloo.solo.io.FilterStateValue](../set_filter_state.proto.sk/#filterstatevalue) | | + + + + +--- +### FilterStateValue + + +A filter state key and value pair. + +```yaml +"objectKey": string +"factoryKey": string +"readOnly": bool +"sharedWithUpstream": .set_filter_state.options.gloo.solo.io.FilterStateValue.SharedWithUpstream +"skipIfEmpty": bool + +``` + +| Field | Type | Description | +| ----- | ---- | ----------- | +| `objectKey` | `string` | Filter state object key. The key is used to lookup the object factory, unless :ref:`factory_key ` is set. See :ref:`the well-known filter state keys ` for a list of valid object keys. | +| `factoryKey` | `string` | Optional filter object factory lookup key. See :ref:`the well-known filter state keys ` for a list of valid factory keys. | +| `readOnly` | `bool` | If marked as read-only, the filter state key value is locked, and cannot be overridden by any filter, including this filter. | +| `sharedWithUpstream` | [.set_filter_state.options.gloo.solo.io.FilterStateValue.SharedWithUpstream](../set_filter_state.proto.sk/#sharedwithupstream) | Configures the object to be shared with the upstream internal connections. See :ref:`internal upstream transport ` for more details on the filter state sharing with the internal connections. | +| `skipIfEmpty` | `bool` | Skip the update if the value evaluates to an empty string. This option can be used to supply multiple alternatives for the same filter state object key. | + + + + +--- +### SharedWithUpstream + + + +| Name | Description | +| ----- | ----------- | +| `NONE` | Object is not shared with the upstream internal connections. | +| `ONCE` | Object is shared with the upstream internal connection. | +| `TRANSITIVE` | Object is shared with the upstream internal connection and any internal connection upstream from it. | + + + + + + + + diff --git a/docs/content/reference/api/github.com/solo-io/gloo/projects/gloo/api/v1/route_options.proto.sk.md b/docs/content/reference/api/github.com/solo-io/gloo/projects/gloo/api/v1/route_options.proto.sk.md index 3d035f7ea3c..9490f7a76d4 100644 --- a/docs/content/reference/api/github.com/solo-io/gloo/projects/gloo/api/v1/route_options.proto.sk.md +++ b/docs/content/reference/api/github.com/solo-io/gloo/projects/gloo/api/v1/route_options.proto.sk.md @@ -73,6 +73,7 @@ to be usable by Gloo. (plugins currently need to be compiled into Gloo) "idleTimeout": .google.protobuf.Duration "extProc": .extproc.options.gloo.solo.io.RouteSettings "ai": .ai.options.gloo.solo.io.RouteSettings +"setFilterState": .set_filter_state.options.gloo.solo.io.SetFilterState ``` @@ -118,6 +119,7 @@ to be usable by Gloo. (plugins currently need to be compiled into Gloo) | `idleTimeout` | [.google.protobuf.Duration](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/duration) | Specifies the idle timeout for the route. If not specified, there is no per-route idle timeout, although the Gateway's [httpConnectionManagerSettings](https://docs.solo.io/gloo-edge/latest/reference/api/github.com/solo-io/gloo/projects/gloo/api/v1/options/hcm/hcm.proto.sk/#httpconnectionmanagersettings) wide stream_idle_timeout will still apply. A value of 0 will completely disable the route’s idle timeout, even if a connection manager stream idle timeout is configured. Please refer to the [Envoy documentation](https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/route/v3/route_components.proto#envoy-v3-api-field-config-route-v3-routeaction-idle-timeout). | | `extProc` | [.extproc.options.gloo.solo.io.RouteSettings](../enterprise/options/extproc/extproc.proto.sk/#routesettings) | Enterprise-only: External Processing filter settings for the route. This can be used to override certain HttpListenerOptions or VirtualHostOptions settings. | | `ai` | [.ai.options.gloo.solo.io.RouteSettings](../enterprise/options/ai/ai.proto.sk/#routesettings) | Enterprise-only: Settings to configure ai settings for a route. These settings will only apply if the backend is an `ai` Upstream. | +| `setFilterState` | [.set_filter_state.options.gloo.solo.io.SetFilterState](../options/set_filter_state/set_filter_state.proto.sk/#setfilterstate) | Settings to configure set-filter-state settings for a route. | diff --git a/docs/content/reference/api/github.com/solo-io/gloo/projects/gloo/api/v1/virtual_host_options.proto.sk.md b/docs/content/reference/api/github.com/solo-io/gloo/projects/gloo/api/v1/virtual_host_options.proto.sk.md index 79282575fde..3e8f26fc409 100644 --- a/docs/content/reference/api/github.com/solo-io/gloo/projects/gloo/api/v1/virtual_host_options.proto.sk.md +++ b/docs/content/reference/api/github.com/solo-io/gloo/projects/gloo/api/v1/virtual_host_options.proto.sk.md @@ -58,6 +58,7 @@ to be usable by Gloo. (plugins currently need to be compiled into Gloo) "stagedTransformations": .transformation.options.gloo.solo.io.TransformationStages "extProc": .extproc.options.gloo.solo.io.RouteSettings "corsPolicyMergeSettings": .cors.options.gloo.solo.io.CorsPolicyMergeSettings +"setFilterState": .set_filter_state.options.gloo.solo.io.SetFilterState ``` @@ -89,6 +90,7 @@ to be usable by Gloo. (plugins currently need to be compiled into Gloo) | `stagedTransformations` | [.transformation.options.gloo.solo.io.TransformationStages](../options/transformation/transformation.proto.sk/#transformationstages) | Early transformations stage. These transformations run before most other options are processed. If the `regular` field is set in here, the `transformations` field is ignored. | | `extProc` | [.extproc.options.gloo.solo.io.RouteSettings](../enterprise/options/extproc/extproc.proto.sk/#routesettings) | Enterprise-only: External Processing filter settings for the virtual host. This can be used to override certain HttpListenerOptions settings, and can be overridden by RouteOptions settings. | | `corsPolicyMergeSettings` | [.cors.options.gloo.solo.io.CorsPolicyMergeSettings](../options/cors/cors.proto.sk/#corspolicymergesettings) | Settings for determining merge strategy for CORS settings when present at both Route and VirtualHost levels. | +| `setFilterState` | [.set_filter_state.options.gloo.solo.io.SetFilterState](../options/set_filter_state/set_filter_state.proto.sk/#setfilterstate) | SetFilterState can be used to set filter state on the request. For more, see https://www.envoyproxy.io/docs/envoy/latest/api-v2/config/filter/http/set_filter_state/v2/set_filter_state.proto. | diff --git a/docs/data/ProtoMap.yaml b/docs/data/ProtoMap.yaml index 7b3690184af..5b6a64211d4 100644 --- a/docs/data/ProtoMap.yaml +++ b/docs/data/ProtoMap.yaml @@ -1523,6 +1523,12 @@ apis: selectors.core.gloo.solo.io.Selector: relativepath: reference/api/github.com/solo-io/gloo/projects/gloo/api/v1/core/selectors/selectors.proto.sk/#Selector package: selectors.core.gloo.solo.io + set_filter_state.options.gloo.solo.io.FilterStateValue: + relativepath: reference/api/github.com/solo-io/gloo/projects/gloo/api/v1/options/set_filter_state/set_filter_state.proto.sk/#FilterStateValue + package: set_filter_state.options.gloo.solo.io + set_filter_state.options.gloo.solo.io.SetFilterState: + relativepath: reference/api/github.com/solo-io/gloo/projects/gloo/api/v1/options/set_filter_state/set_filter_state.proto.sk/#SetFilterState + package: set_filter_state.options.gloo.solo.io shadowing.options.gloo.solo.io.RouteShadowing: relativepath: reference/api/github.com/solo-io/gloo/projects/gloo/api/v1/options/shadowing/shadowing.proto.sk/#RouteShadowing package: shadowing.options.gloo.solo.io diff --git a/install/helm/gloo/crds/gateway.solo.io_v1_Gateway.yaml b/install/helm/gloo/crds/gateway.solo.io_v1_Gateway.yaml index 5813771d379..868d10b3ec0 100644 --- a/install/helm/gloo/crds/gateway.solo.io_v1_Gateway.yaml +++ b/install/helm/gloo/crds/gateway.solo.io_v1_Gateway.yaml @@ -1345,6 +1345,25 @@ spec: sanitizeClusterHeader: nullable: true type: boolean + setFilterState: + properties: + onRequestHeaders: + items: + properties: + factoryKey: + type: string + objectKey: + type: string + readOnly: + type: boolean + sharedWithUpstream: + type: string + x-kubernetes-int-or-string: true + skipIfEmpty: + type: boolean + type: object + type: array + type: object statefulSession: properties: cookieBased: @@ -3427,6 +3446,25 @@ spec: sanitizeClusterHeader: nullable: true type: boolean + setFilterState: + properties: + onRequestHeaders: + items: + properties: + factoryKey: + type: string + objectKey: + type: string + readOnly: + type: boolean + sharedWithUpstream: + type: string + x-kubernetes-int-or-string: true + skipIfEmpty: + type: boolean + type: object + type: array + type: object statefulSession: properties: cookieBased: diff --git a/install/helm/gloo/crds/gateway.solo.io_v1_HttpListenerOption.yaml b/install/helm/gloo/crds/gateway.solo.io_v1_HttpListenerOption.yaml index 5831284f860..fec47d9ef73 100644 --- a/install/helm/gloo/crds/gateway.solo.io_v1_HttpListenerOption.yaml +++ b/install/helm/gloo/crds/gateway.solo.io_v1_HttpListenerOption.yaml @@ -1336,6 +1336,25 @@ spec: sanitizeClusterHeader: nullable: true type: boolean + setFilterState: + properties: + onRequestHeaders: + items: + properties: + factoryKey: + type: string + objectKey: + type: string + readOnly: + type: boolean + sharedWithUpstream: + type: string + x-kubernetes-int-or-string: true + skipIfEmpty: + type: boolean + type: object + type: array + type: object statefulSession: properties: cookieBased: diff --git a/install/helm/gloo/crds/gateway.solo.io_v1_MatchableHttpGateway.yaml b/install/helm/gloo/crds/gateway.solo.io_v1_MatchableHttpGateway.yaml index 7cbf51bb2d0..d2d9e6a22fa 100644 --- a/install/helm/gloo/crds/gateway.solo.io_v1_MatchableHttpGateway.yaml +++ b/install/helm/gloo/crds/gateway.solo.io_v1_MatchableHttpGateway.yaml @@ -1339,6 +1339,25 @@ spec: sanitizeClusterHeader: nullable: true type: boolean + setFilterState: + properties: + onRequestHeaders: + items: + properties: + factoryKey: + type: string + objectKey: + type: string + readOnly: + type: boolean + sharedWithUpstream: + type: string + x-kubernetes-int-or-string: true + skipIfEmpty: + type: boolean + type: object + type: array + type: object statefulSession: properties: cookieBased: diff --git a/install/helm/gloo/crds/gateway.solo.io_v1_RouteOption.yaml b/install/helm/gloo/crds/gateway.solo.io_v1_RouteOption.yaml index 92fe63cd261..703231f20eb 100644 --- a/install/helm/gloo/crds/gateway.solo.io_v1_RouteOption.yaml +++ b/install/helm/gloo/crds/gateway.solo.io_v1_RouteOption.yaml @@ -1698,6 +1698,25 @@ spec: retryOn: type: string type: object + setFilterState: + properties: + onRequestHeaders: + items: + properties: + factoryKey: + type: string + objectKey: + type: string + readOnly: + type: boolean + sharedWithUpstream: + type: string + x-kubernetes-int-or-string: true + skipIfEmpty: + type: boolean + type: object + type: array + type: object shadowing: properties: percentage: diff --git a/install/helm/gloo/crds/gateway.solo.io_v1_RouteTable.yaml b/install/helm/gloo/crds/gateway.solo.io_v1_RouteTable.yaml index 324e52ba869..677d808012f 100644 --- a/install/helm/gloo/crds/gateway.solo.io_v1_RouteTable.yaml +++ b/install/helm/gloo/crds/gateway.solo.io_v1_RouteTable.yaml @@ -1808,6 +1808,25 @@ spec: retryOn: type: string type: object + setFilterState: + properties: + onRequestHeaders: + items: + properties: + factoryKey: + type: string + objectKey: + type: string + readOnly: + type: boolean + sharedWithUpstream: + type: string + x-kubernetes-int-or-string: true + skipIfEmpty: + type: boolean + type: object + type: array + type: object shadowing: properties: percentage: diff --git a/install/helm/gloo/crds/gateway.solo.io_v1_VirtualHostOption.yaml b/install/helm/gloo/crds/gateway.solo.io_v1_VirtualHostOption.yaml index c449074ee42..9f3b3f65230 100644 --- a/install/helm/gloo/crds/gateway.solo.io_v1_VirtualHostOption.yaml +++ b/install/helm/gloo/crds/gateway.solo.io_v1_VirtualHostOption.yaml @@ -1366,6 +1366,25 @@ spec: retryOn: type: string type: object + setFilterState: + properties: + onRequestHeaders: + items: + properties: + factoryKey: + type: string + objectKey: + type: string + readOnly: + type: boolean + sharedWithUpstream: + type: string + x-kubernetes-int-or-string: true + skipIfEmpty: + type: boolean + type: object + type: array + type: object stagedTransformations: properties: early: diff --git a/install/helm/gloo/crds/gateway.solo.io_v1_VirtualService.yaml b/install/helm/gloo/crds/gateway.solo.io_v1_VirtualService.yaml index b88d98f9a85..8fa9a8d7fc4 100644 --- a/install/helm/gloo/crds/gateway.solo.io_v1_VirtualService.yaml +++ b/install/helm/gloo/crds/gateway.solo.io_v1_VirtualService.yaml @@ -1456,6 +1456,25 @@ spec: retryOn: type: string type: object + setFilterState: + properties: + onRequestHeaders: + items: + properties: + factoryKey: + type: string + objectKey: + type: string + readOnly: + type: boolean + sharedWithUpstream: + type: string + x-kubernetes-int-or-string: true + skipIfEmpty: + type: boolean + type: object + type: array + type: object stagedTransformations: properties: early: @@ -4921,6 +4940,25 @@ spec: retryOn: type: string type: object + setFilterState: + properties: + onRequestHeaders: + items: + properties: + factoryKey: + type: string + objectKey: + type: string + readOnly: + type: boolean + sharedWithUpstream: + type: string + x-kubernetes-int-or-string: true + skipIfEmpty: + type: boolean + type: object + type: array + type: object shadowing: properties: percentage: diff --git a/projects/gloo/api/external/envoy/config/core/v3/substitution_format_string.xproto b/projects/gloo/api/external/envoy/config/core/v3/substitution_format_string.xproto new file mode 100644 index 00000000000..08e13da066e --- /dev/null +++ b/projects/gloo/api/external/envoy/config/core/v3/substitution_format_string.xproto @@ -0,0 +1,103 @@ +syntax = "proto3"; + +package solo.io.envoy.config.core.v3; + +import "github.com/solo-io/gloo/projects/gloo/api/external/envoy/config/core/v3/base.proto"; +import "github.com/solo-io/gloo/projects/gloo/api/external/envoy/config/core/v3/extension.proto"; + +import "google/protobuf/struct.proto"; + +import "udpa/annotations/status.proto"; +import "validate/validate.proto"; + +option java_package = "io.envoyproxy.solo.io.envoy.config.core.v3"; +option java_outer_classname = "SubstitutionFormatStringProto"; +option java_multiple_files = true; + +option (solo.io.udpa.annotations.file_status).package_version_status = ACTIVE; +// [#protodoc-title: Substitution format string] + +// Optional configuration options to be used with json_format. +message JsonFormatOptions { + // The output JSON string properties will be sorted. + bool sort_properties = 1; +} + +// Configuration to use multiple :ref:`command operators ` +// to generate a new string in either plain text or JSON format. +// [#next-free-field: 8] +message SubstitutionFormatString { + oneof format { + option (validate.required) = true; + + // Specify a format with command operators to form a JSON string. + // Its details is described in :ref:`format dictionary`. + // Values are rendered as strings, numbers, or boolean values as appropriate. + // Nested JSON objects may be produced by some command operators (e.g. FILTER_STATE or DYNAMIC_METADATA). + // See the documentation for a specific command operator for details. + // + // .. validated-code-block:: yaml + // :type-name: envoy.config.core.v3.SubstitutionFormatString + // + // json_format: + // status: "%RESPONSE_CODE%" + // message: "%LOCAL_REPLY_BODY%" + // + // The following JSON object would be created: + // + // .. code-block:: json + // + // { + // "status": 500, + // "message": "My error message" + // } + // + google.protobuf.Struct json_format = 2 [(validate.rules).message = {required: true}]; + + // Specify a format with command operators to form a text string. + // Its details is described in :ref:`format string`. + // + // For example, setting ``text_format`` like below, + // + // .. validated-code-block:: yaml + // :type-name: envoy.config.core.v3.SubstitutionFormatString + // + // text_format_source: + // inline_string: "%LOCAL_REPLY_BODY%:%RESPONSE_CODE%:path=%REQ(:path)%\n" + // + // generates plain text similar to: + // + // .. code-block:: text + // + // upstream connect error:503:path=/foo + // + DataSource text_format_source = 5; + } + + // If set to true, when command operators are evaluated to null, + // + // * for ``text_format``, the output of the empty operator is changed from ``-`` to an + // empty string, so that empty values are omitted entirely. + // * for ``json_format`` the keys with null values are omitted in the output structure. + bool omit_empty_values = 3; + + // Specify a ``content_type`` field. + // If this field is not set then ``text/plain`` is used for ``text_format`` and + // ``application/json`` is used for ``json_format``. + // + // .. validated-code-block:: yaml + // :type-name: envoy.config.core.v3.SubstitutionFormatString + // + // content_type: "text/html; charset=UTF-8" + // + string content_type = 4 + [(validate.rules).string = {well_known_regex: HTTP_HEADER_VALUE strict: false}]; + + // Specifies a collection of Formatter plugins that can be called from the access log configuration. + // See the formatters extensions documentation for details. + // [#extension-category: envoy.formatter] + repeated TypedExtensionConfig formatters = 6; + + // If json_format is used, the options will be applied to the output JSON string. + JsonFormatOptions json_format_options = 7; +} \ No newline at end of file diff --git a/projects/gloo/api/v1/http_listener_options.proto b/projects/gloo/api/v1/http_listener_options.proto index 6ad2b5badf1..7a2b58d9e1c 100644 --- a/projects/gloo/api/v1/http_listener_options.proto +++ b/projects/gloo/api/v1/http_listener_options.proto @@ -30,6 +30,7 @@ import "github.com/solo-io/gloo/projects/gloo/api/v1/options/router/router.proto import "github.com/solo-io/gloo/projects/gloo/api/v1/enterprise/options/tap/tap.proto"; import "github.com/solo-io/gloo/projects/gloo/api/v1/enterprise/options/stateful_session/stateful_session.proto"; import "github.com/solo-io/gloo/projects/gloo/api/v1/options/header_validation/header_validation.proto"; +import "github.com/solo-io/gloo/projects/gloo/api/v1/options/set_filter_state/set_filter_state.proto"; import "google/protobuf/wrappers.proto"; @@ -144,4 +145,7 @@ message HttpListenerOptions { // the header. header_validation.options.gloo.solo.io.HeaderValidationSettings header_validation_settings = 36; + // Set-Filter-State settings + set_filter_state.options.gloo.solo.io.SetFilterState set_filter_state = 37; + } \ No newline at end of file diff --git a/projects/gloo/api/v1/options/set_filter_state/set_filter_state.proto b/projects/gloo/api/v1/options/set_filter_state/set_filter_state.proto new file mode 100644 index 00000000000..04361b23168 --- /dev/null +++ b/projects/gloo/api/v1/options/set_filter_state/set_filter_state.proto @@ -0,0 +1,62 @@ +syntax = "proto3"; + +package set_filter_state.options.gloo.solo.io; + +option go_package = "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/set_filter_state"; +import "extproto/ext.proto"; +import "validate/validate.proto"; + +// Configuration for the Set-Filter-State HTTP Filter +message SetFilterState { + repeated FilterStateValue on_request_headers = 1; +} + +// Code below from https://github.com/envoyproxy/envoy/blob/c9eb42b909fa5b9c5d7dbf1e09e23e826606e1d5/api/envoy/extensions/filters/common/set_filter_state/v3/value.proto + +// A filter state key and value pair. +message FilterStateValue { + enum SharedWithUpstream { + // Object is not shared with the upstream internal connections. + NONE = 0; + + // Object is shared with the upstream internal connection. + ONCE = 1; + + // Object is shared with the upstream internal connection and any internal connection upstream from it. + TRANSITIVE = 2; + } + + oneof key { + option (validate.required) = true; + + // Filter state object key. The key is used to lookup the object factory, unless :ref:`factory_key + // ` is set. See + // :ref:`the well-known filter state keys ` for a list of valid object keys. + string object_key = 1 [(validate.rules).string = {min_len: 1}]; + } + + // Optional filter object factory lookup key. See :ref:`the well-known filter state keys ` + // for a list of valid factory keys. + string factory_key = 6; + + // oneof value { + // option (validate.required) = true; + + // // Uses the :ref:`format string ` to + // // instantiate the filter state object value. + // .solo.io.envoy.config.core.v3.SubstitutionFormatString format_string = 2; + // } + + // If marked as read-only, the filter state key value is locked, and cannot + // be overridden by any filter, including this filter. + bool read_only = 3; + + // Configures the object to be shared with the upstream internal connections. See :ref:`internal upstream + // transport ` for more details on the filter state sharing with + // the internal connections. + SharedWithUpstream shared_with_upstream = 4; + + // Skip the update if the value evaluates to an empty string. + // This option can be used to supply multiple alternatives for the same filter state object key. + bool skip_if_empty = 5; +} diff --git a/projects/gloo/api/v1/route_options.proto b/projects/gloo/api/v1/route_options.proto index bf184db58a5..36bd8c042f1 100644 --- a/projects/gloo/api/v1/route_options.proto +++ b/projects/gloo/api/v1/route_options.proto @@ -28,6 +28,7 @@ import "github.com/solo-io/gloo/projects/gloo/api/external/envoy/extensions/filt import "github.com/solo-io/gloo/projects/gloo/api/external/envoy/extensions/filters/http/csrf/v3/csrf.proto"; import "github.com/solo-io/gloo/projects/gloo/api/v1/enterprise/options/extproc/extproc.proto"; import "github.com/solo-io/gloo/projects/gloo/api/v1/enterprise/options/ai/ai.proto"; +import "github.com/solo-io/gloo/projects/gloo/api/v1/options/set_filter_state/set_filter_state.proto"; import "google/protobuf/wrappers.proto"; @@ -251,4 +252,7 @@ message RouteOptions { // Enterprise-only: Settings to configure ai settings for a route. // These settings will only apply if the backend is an `ai` Upstream. ai.options.gloo.solo.io.RouteSettings ai = 31; + + // Settings to configure set-filter-state settings for a route. + set_filter_state.options.gloo.solo.io.SetFilterState set_filter_state = 33; } \ No newline at end of file diff --git a/projects/gloo/api/v1/virtual_host_options.proto b/projects/gloo/api/v1/virtual_host_options.proto index f637d1a2d6c..9a5fc2b32a8 100644 --- a/projects/gloo/api/v1/virtual_host_options.proto +++ b/projects/gloo/api/v1/virtual_host_options.proto @@ -22,7 +22,7 @@ import "github.com/solo-io/gloo/projects/gloo/api/v1/enterprise/options/dlp/dlp. import "github.com/solo-io/gloo/projects/gloo/api/external/envoy/extensions/filters/http/buffer/v3/buffer.proto"; import "github.com/solo-io/gloo/projects/gloo/api/external/envoy/extensions/filters/http/csrf/v3/csrf.proto"; import "github.com/solo-io/gloo/projects/gloo/api/v1/enterprise/options/extproc/extproc.proto"; - +import "github.com/solo-io/gloo/projects/gloo/api/v1/options/set_filter_state/set_filter_state.proto"; import "google/protobuf/wrappers.proto"; // Optional, feature-specific configuration that lives on virtual hosts. @@ -158,4 +158,8 @@ message VirtualHostOptions { // Settings for determining merge strategy for CORS settings when present at both Route and VirtualHost levels. cors.options.gloo.solo.io.CorsPolicyMergeSettings cors_policy_merge_settings = 20; + + // SetFilterState can be used to set filter state on the request. + // For more, see https://www.envoyproxy.io/docs/envoy/latest/api-v2/config/filter/http/set_filter_state/v2/set_filter_state.proto + set_filter_state.options.gloo.solo.io.SetFilterState set_filter_state = 21; } \ No newline at end of file diff --git a/projects/gloo/pkg/api/v1/http_listener_options.pb.clone.go b/projects/gloo/pkg/api/v1/http_listener_options.pb.clone.go index 286198cb463..bf40ce1dc8e 100644 --- a/projects/gloo/pkg/api/v1/http_listener_options.pb.clone.go +++ b/projects/gloo/pkg/api/v1/http_listener_options.pb.clone.go @@ -53,6 +53,8 @@ import ( github_com_solo_io_gloo_projects_gloo_pkg_api_v1_options_router "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/router" + github_com_solo_io_gloo_projects_gloo_pkg_api_v1_options_set_filter_state "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/set_filter_state" + github_com_solo_io_gloo_projects_gloo_pkg_api_v1_options_tap "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/tap" github_com_solo_io_gloo_projects_gloo_pkg_api_v1_options_wasm "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/wasm" @@ -229,6 +231,12 @@ func (m *HttpListenerOptions) Clone() proto.Message { target.HeaderValidationSettings = proto.Clone(m.GetHeaderValidationSettings()).(*github_com_solo_io_gloo_projects_gloo_pkg_api_v1_options_header_validation.HeaderValidationSettings) } + if h, ok := interface{}(m.GetSetFilterState()).(clone.Cloner); ok { + target.SetFilterState = h.Clone().(*github_com_solo_io_gloo_projects_gloo_pkg_api_v1_options_set_filter_state.SetFilterState) + } else { + target.SetFilterState = proto.Clone(m.GetSetFilterState()).(*github_com_solo_io_gloo_projects_gloo_pkg_api_v1_options_set_filter_state.SetFilterState) + } + switch m.ExtProcConfig.(type) { case *HttpListenerOptions_DisableExtProc: diff --git a/projects/gloo/pkg/api/v1/http_listener_options.pb.equal.go b/projects/gloo/pkg/api/v1/http_listener_options.pb.equal.go index c0745a290e3..dcf4df07605 100644 --- a/projects/gloo/pkg/api/v1/http_listener_options.pb.equal.go +++ b/projects/gloo/pkg/api/v1/http_listener_options.pb.equal.go @@ -296,6 +296,16 @@ func (m *HttpListenerOptions) Equal(that interface{}) bool { } } + if h, ok := interface{}(m.GetSetFilterState()).(equality.Equalizer); ok { + if !h.Equal(target.GetSetFilterState()) { + return false + } + } else { + if !proto.Equal(m.GetSetFilterState(), target.GetSetFilterState()) { + return false + } + } + switch m.ExtProcConfig.(type) { case *HttpListenerOptions_DisableExtProc: diff --git a/projects/gloo/pkg/api/v1/http_listener_options.pb.go b/projects/gloo/pkg/api/v1/http_listener_options.pb.go index 468c1097fee..a915ac80902 100644 --- a/projects/gloo/pkg/api/v1/http_listener_options.pb.go +++ b/projects/gloo/pkg/api/v1/http_listener_options.pb.go @@ -31,6 +31,7 @@ import ( healthcheck "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/healthcheck" local_ratelimit "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/local_ratelimit" router "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/router" + set_filter_state "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/set_filter_state" tap "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/tap" wasm "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/wasm" _ "github.com/solo-io/protoc-gen-ext/extproto" @@ -138,8 +139,10 @@ type HttpListenerOptions struct { // determine whether requests should be rejected based on the contents of // the header. HeaderValidationSettings *header_validation.HeaderValidationSettings `protobuf:"bytes,36,opt,name=header_validation_settings,json=headerValidationSettings,proto3" json:"header_validation_settings,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // Set-Filter-State settings + SetFilterState *set_filter_state.SetFilterState `protobuf:"bytes,37,opt,name=set_filter_state,json=setFilterState,proto3" json:"set_filter_state,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *HttpListenerOptions) Reset() { @@ -372,6 +375,13 @@ func (x *HttpListenerOptions) GetHeaderValidationSettings() *header_validation.H return nil } +func (x *HttpListenerOptions) GetSetFilterState() *set_filter_state.SetFilterState { + if x != nil { + return x.SetFilterState + } + return nil +} + type isHttpListenerOptions_ExtProcConfig interface { isHttpListenerOptions_ExtProcConfig() } @@ -528,151 +538,163 @@ var file_github_com_solo_io_gloo_projects_gloo_api_v1_http_listener_options_prot 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, - 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, - 0x9f, 0x11, 0x0a, 0x13, 0x48, 0x74, 0x74, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, - 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x41, 0x0a, 0x08, 0x67, 0x72, 0x70, 0x63, 0x5f, - 0x77, 0x65, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x5f, 0x77, 0x65, 0x62, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, - 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x57, 0x65, - 0x62, 0x52, 0x07, 0x67, 0x72, 0x70, 0x63, 0x57, 0x65, 0x62, 0x12, 0x80, 0x01, 0x0a, 0x20, 0x68, - 0x74, 0x74, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x68, 0x63, 0x6d, 0x2e, 0x6f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, - 0x2e, 0x48, 0x74, 0x74, 0x70, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x1d, - 0x68, 0x74, 0x74, 0x70, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x50, 0x0a, - 0x0c, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x63, 0x68, 0x65, 0x63, - 0x6b, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, - 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x52, 0x0b, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, - 0x38, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, - 0x69, 0x6f, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0a, 0x65, - 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x34, 0x0a, 0x03, 0x77, 0x61, 0x66, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x77, 0x61, 0x66, 0x2e, 0x6f, 0x70, 0x74, + 0x5c, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x6f, 0x6c, 0x6f, + 0x2d, 0x69, 0x6f, 0x2f, 0x67, 0x6c, 0x6f, 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x73, 0x2f, 0x67, 0x6c, 0x6f, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x73, 0x65, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x73, 0x65, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, + 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x80, 0x12, + 0x0a, 0x13, 0x48, 0x74, 0x74, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x4f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x41, 0x0a, 0x08, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x77, 0x65, + 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x77, + 0x65, 0x62, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, + 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x57, 0x65, 0x62, 0x52, + 0x07, 0x67, 0x72, 0x70, 0x63, 0x57, 0x65, 0x62, 0x12, 0x80, 0x01, 0x0a, 0x20, 0x68, 0x74, 0x74, + 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x6e, + 0x61, 0x67, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x68, 0x63, 0x6d, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x48, + 0x74, 0x74, 0x70, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x6e, + 0x61, 0x67, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x1d, 0x68, 0x74, + 0x74, 0x70, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x6e, 0x61, + 0x67, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x50, 0x0a, 0x0c, 0x68, + 0x65, 0x61, 0x6c, 0x74, 0x68, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2d, 0x2e, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x2e, + 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, + 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x52, 0x0b, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x38, 0x0a, + 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, + 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0a, 0x65, 0x78, 0x74, + 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x34, 0x0a, 0x03, 0x77, 0x61, 0x66, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x77, 0x61, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, + 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x03, 0x77, 0x61, 0x66, 0x12, 0x38, 0x0a, + 0x03, 0x64, 0x6c, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x64, 0x6c, 0x70, + 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, + 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x52, 0x03, 0x64, 0x6c, 0x70, 0x12, 0x3b, 0x0a, 0x04, 0x77, 0x61, 0x73, 0x6d, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x77, 0x61, 0x73, 0x6d, 0x2e, 0x6f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, + 0x6f, 0x2e, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x04, + 0x77, 0x61, 0x73, 0x6d, 0x12, 0x3b, 0x0a, 0x07, 0x65, 0x78, 0x74, 0x61, 0x75, 0x74, 0x68, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, + 0x73, 0x65, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, + 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x07, 0x65, 0x78, 0x74, 0x61, 0x75, 0x74, + 0x68, 0x12, 0x53, 0x0a, 0x10, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x72, 0x61, + 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x53, 0x65, 0x74, + 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0f, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, + 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x40, 0x0a, 0x07, 0x63, 0x61, 0x63, 0x68, 0x69, 0x6e, + 0x67, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x61, 0x63, 0x68, 0x69, 0x6e, + 0x67, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, + 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, + 0x07, 0x63, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x46, 0x0a, 0x10, 0x64, 0x69, 0x73, 0x61, + 0x62, 0x6c, 0x65, 0x5f, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x63, 0x18, 0x1e, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, + 0x52, 0x0e, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x78, 0x74, 0x50, 0x72, 0x6f, 0x63, + 0x12, 0x43, 0x0a, 0x08, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x63, 0x18, 0x1f, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x65, 0x78, 0x74, 0x70, 0x72, 0x6f, 0x63, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, - 0x6f, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x03, 0x77, 0x61, 0x66, 0x12, - 0x38, 0x0a, 0x03, 0x64, 0x6c, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x64, - 0x6c, 0x70, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, - 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x03, 0x64, 0x6c, 0x70, 0x12, 0x3b, 0x0a, 0x04, 0x77, 0x61, 0x73, - 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x77, 0x61, 0x73, 0x6d, 0x2e, 0x6f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, - 0x2e, 0x69, 0x6f, 0x2e, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x52, 0x04, 0x77, 0x61, 0x73, 0x6d, 0x12, 0x3b, 0x0a, 0x07, 0x65, 0x78, 0x74, 0x61, 0x75, 0x74, - 0x68, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x70, - 0x72, 0x69, 0x73, 0x65, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, - 0x6f, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x07, 0x65, 0x78, 0x74, 0x61, - 0x75, 0x74, 0x68, 0x12, 0x53, 0x0a, 0x10, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, - 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, - 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x6f, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x48, 0x00, 0x52, 0x07, 0x65, 0x78, + 0x74, 0x50, 0x72, 0x6f, 0x63, 0x12, 0x42, 0x0a, 0x04, 0x67, 0x7a, 0x69, 0x70, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x65, 0x6e, + 0x76, 0x6f, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x2e, 0x67, 0x7a, 0x69, 0x70, 0x2e, 0x76, 0x32, 0x2e, 0x47, + 0x7a, 0x69, 0x70, 0x52, 0x04, 0x67, 0x7a, 0x69, 0x70, 0x12, 0x5b, 0x0a, 0x0d, 0x70, 0x72, 0x6f, + 0x78, 0x79, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x36, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x78, + 0x79, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x72, 0x6f, 0x78, + 0x79, 0x4c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x4c, + 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x4f, 0x0a, 0x06, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, + 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, + 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x2e, 0x62, + 0x75, 0x66, 0x66, 0x65, 0x72, 0x2e, 0x76, 0x33, 0x2e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x52, + 0x06, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x12, 0x4d, 0x0a, 0x04, 0x63, 0x73, 0x72, 0x66, 0x18, + 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, + 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x2e, 0x63, 0x73, + 0x72, 0x66, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x73, 0x72, 0x66, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x52, 0x04, 0x63, 0x73, 0x72, 0x66, 0x12, 0x64, 0x0a, 0x14, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x6a, + 0x73, 0x6f, 0x6e, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x18, 0x0d, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, + 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, + 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x4a, 0x73, 0x6f, 0x6e, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x52, 0x12, 0x67, 0x72, 0x70, 0x63, 0x4a, 0x73, + 0x6f, 0x6e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x12, 0x52, 0x0a, 0x17, + 0x73, 0x61, 0x6e, 0x69, 0x74, 0x69, 0x7a, 0x65, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x73, 0x61, 0x6e, 0x69, 0x74, + 0x69, 0x7a, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x12, 0x4c, 0x0a, 0x14, 0x6c, 0x65, 0x66, 0x74, 0x6d, 0x6f, 0x73, 0x74, 0x5f, 0x78, 0x66, 0x66, + 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x6c, 0x65, 0x66, 0x74, + 0x6d, 0x6f, 0x73, 0x74, 0x58, 0x66, 0x66, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x5a, + 0x0a, 0x15, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x5f, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, + 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, + 0x64, 0x66, 0x70, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, + 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x13, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x46, 0x6f, + 0x72, 0x77, 0x61, 0x72, 0x64, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x12, 0x61, 0x0a, 0x10, 0x63, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x1d, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x43, 0x6f, 0x6e, + 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x0f, 0x63, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x69, 0x0a, + 0x17, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x72, + 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, + 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, + 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, + 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x75, 0x63, 0x6b, 0x65, + 0x74, 0x52, 0x15, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x52, + 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x60, 0x0a, 0x14, 0x68, 0x74, 0x74, 0x70, + 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, + 0x18, 0x21, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x72, + 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x53, 0x65, + 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x12, 0x68, 0x74, 0x74, 0x70, 0x4c, 0x6f, 0x63, 0x61, + 0x6c, 0x52, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x2c, 0x0a, 0x06, 0x72, 0x6f, + 0x75, 0x74, 0x65, 0x72, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6c, 0x6f, + 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, + 0x52, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x12, 0x2f, 0x0a, 0x03, 0x74, 0x61, 0x70, 0x18, + 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x74, 0x61, 0x70, 0x2e, 0x6f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, + 0x2e, 0x54, 0x61, 0x70, 0x52, 0x03, 0x74, 0x61, 0x70, 0x12, 0x61, 0x0a, 0x10, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x66, 0x75, 0x6c, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x23, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, 0x5f, 0x73, + 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, + 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x66, 0x75, 0x6c, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x66, 0x75, 0x6c, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x7e, 0x0a, 0x1a, + 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x40, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, + 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, + 0x67, 0x73, 0x52, 0x18, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x5f, 0x0a, 0x10, + 0x73, 0x65, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, + 0x18, 0x25, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x73, 0x65, 0x74, 0x5f, 0x66, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x53, - 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0f, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, - 0x69, 0x74, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x40, 0x0a, 0x07, 0x63, 0x61, 0x63, 0x68, - 0x69, 0x6e, 0x67, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x61, 0x63, 0x68, - 0x69, 0x6e, 0x67, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, - 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x73, 0x52, 0x07, 0x63, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x46, 0x0a, 0x10, 0x64, 0x69, - 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x63, 0x18, 0x1e, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x48, 0x00, 0x52, 0x0e, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x78, 0x74, 0x50, 0x72, - 0x6f, 0x63, 0x12, 0x43, 0x0a, 0x08, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x63, 0x18, 0x1f, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x65, 0x78, 0x74, 0x70, 0x72, 0x6f, 0x63, 0x2e, 0x6f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, - 0x2e, 0x69, 0x6f, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x48, 0x00, 0x52, 0x07, - 0x65, 0x78, 0x74, 0x50, 0x72, 0x6f, 0x63, 0x12, 0x42, 0x0a, 0x04, 0x67, 0x7a, 0x69, 0x70, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, - 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x66, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x2e, 0x67, 0x7a, 0x69, 0x70, 0x2e, 0x76, 0x32, - 0x2e, 0x47, 0x7a, 0x69, 0x70, 0x52, 0x04, 0x67, 0x7a, 0x69, 0x70, 0x12, 0x5b, 0x0a, 0x0d, 0x70, - 0x72, 0x6f, 0x78, 0x79, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x2e, 0x70, 0x72, - 0x6f, 0x78, 0x79, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x72, - 0x6f, 0x78, 0x79, 0x4c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x78, - 0x79, 0x4c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x4f, 0x0a, 0x06, 0x62, 0x75, 0x66, 0x66, - 0x65, 0x72, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, - 0x69, 0x6f, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x68, 0x74, 0x74, 0x70, - 0x2e, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2e, 0x76, 0x33, 0x2e, 0x42, 0x75, 0x66, 0x66, 0x65, - 0x72, 0x52, 0x06, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x12, 0x4d, 0x0a, 0x04, 0x63, 0x73, 0x72, - 0x66, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, - 0x6f, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x2e, - 0x63, 0x73, 0x72, 0x66, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x73, 0x72, 0x66, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x52, 0x04, 0x63, 0x73, 0x72, 0x66, 0x12, 0x64, 0x0a, 0x14, 0x67, 0x72, 0x70, 0x63, - 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x6f, 0x64, 0x65, 0x72, - 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x6a, 0x73, - 0x6f, 0x6e, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, - 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x4a, 0x73, 0x6f, 0x6e, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x52, 0x12, 0x67, 0x72, 0x70, 0x63, - 0x4a, 0x73, 0x6f, 0x6e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x12, 0x52, - 0x0a, 0x17, 0x73, 0x61, 0x6e, 0x69, 0x74, 0x69, 0x7a, 0x65, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x73, 0x61, 0x6e, - 0x69, 0x74, 0x69, 0x7a, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x48, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x12, 0x4c, 0x0a, 0x14, 0x6c, 0x65, 0x66, 0x74, 0x6d, 0x6f, 0x73, 0x74, 0x5f, 0x78, - 0x66, 0x66, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x6c, 0x65, - 0x66, 0x74, 0x6d, 0x6f, 0x73, 0x74, 0x58, 0x66, 0x66, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x12, 0x5a, 0x0a, 0x15, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x5f, 0x66, 0x6f, 0x72, 0x77, - 0x61, 0x72, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x26, 0x2e, 0x64, 0x66, 0x70, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, - 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x13, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, - 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x12, 0x61, 0x0a, 0x10, - 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, - 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x43, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x0f, - 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, - 0x69, 0x0a, 0x17, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, - 0x5f, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x31, 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, - 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, - 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x75, 0x63, - 0x6b, 0x65, 0x74, 0x52, 0x15, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x4c, 0x6f, 0x63, 0x61, - 0x6c, 0x52, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x60, 0x0a, 0x14, 0x68, 0x74, - 0x74, 0x70, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, - 0x69, 0x74, 0x18, 0x21, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x6c, - 0x5f, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, - 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x12, 0x68, 0x74, 0x74, 0x70, 0x4c, 0x6f, - 0x63, 0x61, 0x6c, 0x52, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x2c, 0x0a, 0x06, - 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, - 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x52, 0x6f, 0x75, 0x74, - 0x65, 0x72, 0x52, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x12, 0x2f, 0x0a, 0x03, 0x74, 0x61, - 0x70, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x74, 0x61, 0x70, 0x2e, 0x6f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, - 0x69, 0x6f, 0x2e, 0x54, 0x61, 0x70, 0x52, 0x03, 0x74, 0x61, 0x70, 0x12, 0x61, 0x0a, 0x10, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, - 0x23, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, - 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x7e, - 0x0a, 0x1a, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x24, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, - 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x48, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, - 0x69, 0x6e, 0x67, 0x73, 0x52, 0x18, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x56, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x42, 0x11, - 0x0a, 0x0f, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x63, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x42, 0x3e, 0xb8, 0xf5, 0x04, 0x01, 0xc0, 0xf5, 0x04, 0x01, 0xd0, 0xf5, 0x04, 0x01, 0x5a, - 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x6f, 0x6c, 0x6f, - 0x2d, 0x69, 0x6f, 0x2f, 0x67, 0x6c, 0x6f, 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x2f, 0x67, 0x6c, 0x6f, 0x6f, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, - 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0e, 0x73, + 0x65, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x42, 0x11, 0x0a, + 0x0f, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x63, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x42, 0x3e, 0xb8, 0xf5, 0x04, 0x01, 0xc0, 0xf5, 0x04, 0x01, 0xd0, 0xf5, 0x04, 0x01, 0x5a, 0x30, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x6f, 0x6c, 0x6f, 0x2d, + 0x69, 0x6f, 0x2f, 0x67, 0x6c, 0x6f, 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, + 0x2f, 0x67, 0x6c, 0x6f, 0x6f, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, }) var ( @@ -715,6 +737,7 @@ var file_github_com_solo_io_gloo_projects_gloo_api_v1_http_listener_options_prot (*tap.Tap)(nil), // 23: tap.options.gloo.solo.io.Tap (*stateful_session.StatefulSession)(nil), // 24: stateful_session.options.gloo.solo.io.StatefulSession (*header_validation.HeaderValidationSettings)(nil), // 25: header_validation.options.gloo.solo.io.HeaderValidationSettings + (*set_filter_state.SetFilterState)(nil), // 26: set_filter_state.options.gloo.solo.io.SetFilterState } var file_github_com_solo_io_gloo_projects_gloo_api_v1_http_listener_options_proto_depIdxs = []int32{ 1, // 0: gloo.solo.io.HttpListenerOptions.grpc_web:type_name -> grpc_web.options.gloo.solo.io.GrpcWeb @@ -744,11 +767,12 @@ var file_github_com_solo_io_gloo_projects_gloo_api_v1_http_listener_options_prot 23, // 24: gloo.solo.io.HttpListenerOptions.tap:type_name -> tap.options.gloo.solo.io.Tap 24, // 25: gloo.solo.io.HttpListenerOptions.stateful_session:type_name -> stateful_session.options.gloo.solo.io.StatefulSession 25, // 26: gloo.solo.io.HttpListenerOptions.header_validation_settings:type_name -> header_validation.options.gloo.solo.io.HeaderValidationSettings - 27, // [27:27] is the sub-list for method output_type - 27, // [27:27] is the sub-list for method input_type - 27, // [27:27] is the sub-list for extension type_name - 27, // [27:27] is the sub-list for extension extendee - 0, // [0:27] is the sub-list for field type_name + 26, // 27: gloo.solo.io.HttpListenerOptions.set_filter_state:type_name -> set_filter_state.options.gloo.solo.io.SetFilterState + 28, // [28:28] is the sub-list for method output_type + 28, // [28:28] is the sub-list for method input_type + 28, // [28:28] is the sub-list for extension type_name + 28, // [28:28] is the sub-list for extension extendee + 0, // [0:28] is the sub-list for field type_name } func init() { file_github_com_solo_io_gloo_projects_gloo_api_v1_http_listener_options_proto_init() } diff --git a/projects/gloo/pkg/api/v1/http_listener_options.pb.hash.go b/projects/gloo/pkg/api/v1/http_listener_options.pb.hash.go index 3e3ded49fff..0ef9577babb 100644 --- a/projects/gloo/pkg/api/v1/http_listener_options.pb.hash.go +++ b/projects/gloo/pkg/api/v1/http_listener_options.pb.hash.go @@ -542,6 +542,26 @@ func (m *HttpListenerOptions) Hash(hasher hash.Hash64) (uint64, error) { } } + if h, ok := interface{}(m.GetSetFilterState()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("SetFilterState")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSetFilterState(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("SetFilterState")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + switch m.ExtProcConfig.(type) { case *HttpListenerOptions_DisableExtProc: diff --git a/projects/gloo/pkg/api/v1/http_listener_options.pb.uniquehash.go b/projects/gloo/pkg/api/v1/http_listener_options.pb.uniquehash.go index 96ae42871cd..bb598b530e0 100644 --- a/projects/gloo/pkg/api/v1/http_listener_options.pb.uniquehash.go +++ b/projects/gloo/pkg/api/v1/http_listener_options.pb.uniquehash.go @@ -543,6 +543,26 @@ func (m *HttpListenerOptions) HashUnique(hasher hash.Hash64) (uint64, error) { } } + if h, ok := interface{}(m.GetSetFilterState()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("SetFilterState")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSetFilterState(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("SetFilterState")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + switch m.ExtProcConfig.(type) { case *HttpListenerOptions_DisableExtProc: diff --git a/projects/gloo/pkg/api/v1/options/set_filter_state/set_filter_state.pb.go b/projects/gloo/pkg/api/v1/options/set_filter_state/set_filter_state.pb.go new file mode 100644 index 00000000000..3f21c891357 --- /dev/null +++ b/projects/gloo/pkg/api/v1/options/set_filter_state/set_filter_state.pb.go @@ -0,0 +1,344 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.5 +// protoc v3.6.1 +// source: github.com/solo-io/gloo/projects/gloo/api/v1/options/set_filter_state/set_filter_state.proto + +package set_filter_state + +import ( + reflect "reflect" + sync "sync" + unsafe "unsafe" + + _ "github.com/envoyproxy/protoc-gen-validate/validate" + _ "github.com/solo-io/protoc-gen-ext/extproto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type FilterStateValue_SharedWithUpstream int32 + +const ( + // Object is not shared with the upstream internal connections. + FilterStateValue_NONE FilterStateValue_SharedWithUpstream = 0 + // Object is shared with the upstream internal connection. + FilterStateValue_ONCE FilterStateValue_SharedWithUpstream = 1 + // Object is shared with the upstream internal connection and any internal connection upstream from it. + FilterStateValue_TRANSITIVE FilterStateValue_SharedWithUpstream = 2 +) + +// Enum value maps for FilterStateValue_SharedWithUpstream. +var ( + FilterStateValue_SharedWithUpstream_name = map[int32]string{ + 0: "NONE", + 1: "ONCE", + 2: "TRANSITIVE", + } + FilterStateValue_SharedWithUpstream_value = map[string]int32{ + "NONE": 0, + "ONCE": 1, + "TRANSITIVE": 2, + } +) + +func (x FilterStateValue_SharedWithUpstream) Enum() *FilterStateValue_SharedWithUpstream { + p := new(FilterStateValue_SharedWithUpstream) + *p = x + return p +} + +func (x FilterStateValue_SharedWithUpstream) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (FilterStateValue_SharedWithUpstream) Descriptor() protoreflect.EnumDescriptor { + return file_github_com_solo_io_gloo_projects_gloo_api_v1_options_set_filter_state_set_filter_state_proto_enumTypes[0].Descriptor() +} + +func (FilterStateValue_SharedWithUpstream) Type() protoreflect.EnumType { + return &file_github_com_solo_io_gloo_projects_gloo_api_v1_options_set_filter_state_set_filter_state_proto_enumTypes[0] +} + +func (x FilterStateValue_SharedWithUpstream) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use FilterStateValue_SharedWithUpstream.Descriptor instead. +func (FilterStateValue_SharedWithUpstream) EnumDescriptor() ([]byte, []int) { + return file_github_com_solo_io_gloo_projects_gloo_api_v1_options_set_filter_state_set_filter_state_proto_rawDescGZIP(), []int{1, 0} +} + +// Configuration for the Set-Filter-State HTTP Filter +type SetFilterState struct { + state protoimpl.MessageState `protogen:"open.v1"` + OnRequestHeaders []*FilterStateValue `protobuf:"bytes,1,rep,name=on_request_headers,json=onRequestHeaders,proto3" json:"on_request_headers,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SetFilterState) Reset() { + *x = SetFilterState{} + mi := &file_github_com_solo_io_gloo_projects_gloo_api_v1_options_set_filter_state_set_filter_state_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SetFilterState) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SetFilterState) ProtoMessage() {} + +func (x *SetFilterState) ProtoReflect() protoreflect.Message { + mi := &file_github_com_solo_io_gloo_projects_gloo_api_v1_options_set_filter_state_set_filter_state_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SetFilterState.ProtoReflect.Descriptor instead. +func (*SetFilterState) Descriptor() ([]byte, []int) { + return file_github_com_solo_io_gloo_projects_gloo_api_v1_options_set_filter_state_set_filter_state_proto_rawDescGZIP(), []int{0} +} + +func (x *SetFilterState) GetOnRequestHeaders() []*FilterStateValue { + if x != nil { + return x.OnRequestHeaders + } + return nil +} + +// A filter state key and value pair. +type FilterStateValue struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Key: + // + // *FilterStateValue_ObjectKey + Key isFilterStateValue_Key `protobuf_oneof:"key"` + // Optional filter object factory lookup key. See :ref:`the well-known filter state keys ` + // for a list of valid factory keys. + FactoryKey string `protobuf:"bytes,6,opt,name=factory_key,json=factoryKey,proto3" json:"factory_key,omitempty"` + // If marked as read-only, the filter state key value is locked, and cannot + // be overridden by any filter, including this filter. + ReadOnly bool `protobuf:"varint,3,opt,name=read_only,json=readOnly,proto3" json:"read_only,omitempty"` + // Configures the object to be shared with the upstream internal connections. See :ref:`internal upstream + // transport ` for more details on the filter state sharing with + // the internal connections. + SharedWithUpstream FilterStateValue_SharedWithUpstream `protobuf:"varint,4,opt,name=shared_with_upstream,json=sharedWithUpstream,proto3,enum=set_filter_state.options.gloo.solo.io.FilterStateValue_SharedWithUpstream" json:"shared_with_upstream,omitempty"` + // Skip the update if the value evaluates to an empty string. + // This option can be used to supply multiple alternatives for the same filter state object key. + SkipIfEmpty bool `protobuf:"varint,5,opt,name=skip_if_empty,json=skipIfEmpty,proto3" json:"skip_if_empty,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *FilterStateValue) Reset() { + *x = FilterStateValue{} + mi := &file_github_com_solo_io_gloo_projects_gloo_api_v1_options_set_filter_state_set_filter_state_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *FilterStateValue) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FilterStateValue) ProtoMessage() {} + +func (x *FilterStateValue) ProtoReflect() protoreflect.Message { + mi := &file_github_com_solo_io_gloo_projects_gloo_api_v1_options_set_filter_state_set_filter_state_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FilterStateValue.ProtoReflect.Descriptor instead. +func (*FilterStateValue) Descriptor() ([]byte, []int) { + return file_github_com_solo_io_gloo_projects_gloo_api_v1_options_set_filter_state_set_filter_state_proto_rawDescGZIP(), []int{1} +} + +func (x *FilterStateValue) GetKey() isFilterStateValue_Key { + if x != nil { + return x.Key + } + return nil +} + +func (x *FilterStateValue) GetObjectKey() string { + if x != nil { + if x, ok := x.Key.(*FilterStateValue_ObjectKey); ok { + return x.ObjectKey + } + } + return "" +} + +func (x *FilterStateValue) GetFactoryKey() string { + if x != nil { + return x.FactoryKey + } + return "" +} + +func (x *FilterStateValue) GetReadOnly() bool { + if x != nil { + return x.ReadOnly + } + return false +} + +func (x *FilterStateValue) GetSharedWithUpstream() FilterStateValue_SharedWithUpstream { + if x != nil { + return x.SharedWithUpstream + } + return FilterStateValue_NONE +} + +func (x *FilterStateValue) GetSkipIfEmpty() bool { + if x != nil { + return x.SkipIfEmpty + } + return false +} + +type isFilterStateValue_Key interface { + isFilterStateValue_Key() +} + +type FilterStateValue_ObjectKey struct { + // Filter state object key. The key is used to lookup the object factory, unless :ref:`factory_key + // ` is set. See + // :ref:`the well-known filter state keys ` for a list of valid object keys. + ObjectKey string `protobuf:"bytes,1,opt,name=object_key,json=objectKey,proto3,oneof"` +} + +func (*FilterStateValue_ObjectKey) isFilterStateValue_Key() {} + +var File_github_com_solo_io_gloo_projects_gloo_api_v1_options_set_filter_state_set_filter_state_proto protoreflect.FileDescriptor + +var file_github_com_solo_io_gloo_projects_gloo_api_v1_options_set_filter_state_set_filter_state_proto_rawDesc = string([]byte{ + 0x0a, 0x5c, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x6f, 0x6c, + 0x6f, 0x2d, 0x69, 0x6f, 0x2f, 0x67, 0x6c, 0x6f, 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x73, 0x2f, 0x67, 0x6c, 0x6f, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x73, 0x65, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x73, 0x65, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x25, + 0x73, 0x65, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, + 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, + 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x1a, 0x12, 0x65, 0x78, 0x74, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, + 0x65, 0x78, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x22, 0x77, 0x0a, 0x0e, 0x53, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x12, 0x65, 0x0a, 0x12, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x37, 0x2e, 0x73, 0x65, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, + 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x10, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x22, 0xe2, 0x02, 0x0a, 0x10, + 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x28, 0x0a, 0x0a, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x48, 0x00, 0x52, + 0x09, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x61, + 0x63, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x4b, 0x65, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x72, + 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, + 0x72, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x7c, 0x0a, 0x14, 0x73, 0x68, 0x61, 0x72, + 0x65, 0x64, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x4a, 0x2e, 0x73, 0x65, 0x74, 0x5f, 0x66, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x46, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x2e, + 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x57, 0x69, 0x74, 0x68, 0x55, 0x70, 0x73, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x52, 0x12, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x57, 0x69, 0x74, 0x68, 0x55, 0x70, + 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x22, 0x0a, 0x0d, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x69, + 0x66, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x73, + 0x6b, 0x69, 0x70, 0x49, 0x66, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x38, 0x0a, 0x12, 0x53, 0x68, + 0x61, 0x72, 0x65, 0x64, 0x57, 0x69, 0x74, 0x68, 0x55, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x4f, 0x4e, + 0x43, 0x45, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x49, 0x54, 0x49, + 0x56, 0x45, 0x10, 0x02, 0x42, 0x0a, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x03, 0xf8, 0x42, 0x01, + 0x42, 0x4b, 0x5a, 0x49, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, + 0x6f, 0x6c, 0x6f, 0x2d, 0x69, 0x6f, 0x2f, 0x67, 0x6c, 0x6f, 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x73, 0x2f, 0x67, 0x6c, 0x6f, 0x6f, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x73, 0x65, 0x74, + 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, +}) + +var ( + file_github_com_solo_io_gloo_projects_gloo_api_v1_options_set_filter_state_set_filter_state_proto_rawDescOnce sync.Once + file_github_com_solo_io_gloo_projects_gloo_api_v1_options_set_filter_state_set_filter_state_proto_rawDescData []byte +) + +func file_github_com_solo_io_gloo_projects_gloo_api_v1_options_set_filter_state_set_filter_state_proto_rawDescGZIP() []byte { + file_github_com_solo_io_gloo_projects_gloo_api_v1_options_set_filter_state_set_filter_state_proto_rawDescOnce.Do(func() { + file_github_com_solo_io_gloo_projects_gloo_api_v1_options_set_filter_state_set_filter_state_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_github_com_solo_io_gloo_projects_gloo_api_v1_options_set_filter_state_set_filter_state_proto_rawDesc), len(file_github_com_solo_io_gloo_projects_gloo_api_v1_options_set_filter_state_set_filter_state_proto_rawDesc))) + }) + return file_github_com_solo_io_gloo_projects_gloo_api_v1_options_set_filter_state_set_filter_state_proto_rawDescData +} + +var file_github_com_solo_io_gloo_projects_gloo_api_v1_options_set_filter_state_set_filter_state_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_github_com_solo_io_gloo_projects_gloo_api_v1_options_set_filter_state_set_filter_state_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_github_com_solo_io_gloo_projects_gloo_api_v1_options_set_filter_state_set_filter_state_proto_goTypes = []any{ + (FilterStateValue_SharedWithUpstream)(0), // 0: set_filter_state.options.gloo.solo.io.FilterStateValue.SharedWithUpstream + (*SetFilterState)(nil), // 1: set_filter_state.options.gloo.solo.io.SetFilterState + (*FilterStateValue)(nil), // 2: set_filter_state.options.gloo.solo.io.FilterStateValue +} +var file_github_com_solo_io_gloo_projects_gloo_api_v1_options_set_filter_state_set_filter_state_proto_depIdxs = []int32{ + 2, // 0: set_filter_state.options.gloo.solo.io.SetFilterState.on_request_headers:type_name -> set_filter_state.options.gloo.solo.io.FilterStateValue + 0, // 1: set_filter_state.options.gloo.solo.io.FilterStateValue.shared_with_upstream:type_name -> set_filter_state.options.gloo.solo.io.FilterStateValue.SharedWithUpstream + 2, // [2:2] is the sub-list for method output_type + 2, // [2:2] is the sub-list for method input_type + 2, // [2:2] is the sub-list for extension type_name + 2, // [2:2] is the sub-list for extension extendee + 0, // [0:2] is the sub-list for field type_name +} + +func init() { + file_github_com_solo_io_gloo_projects_gloo_api_v1_options_set_filter_state_set_filter_state_proto_init() +} +func file_github_com_solo_io_gloo_projects_gloo_api_v1_options_set_filter_state_set_filter_state_proto_init() { + if File_github_com_solo_io_gloo_projects_gloo_api_v1_options_set_filter_state_set_filter_state_proto != nil { + return + } + file_github_com_solo_io_gloo_projects_gloo_api_v1_options_set_filter_state_set_filter_state_proto_msgTypes[1].OneofWrappers = []any{ + (*FilterStateValue_ObjectKey)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_github_com_solo_io_gloo_projects_gloo_api_v1_options_set_filter_state_set_filter_state_proto_rawDesc), len(file_github_com_solo_io_gloo_projects_gloo_api_v1_options_set_filter_state_set_filter_state_proto_rawDesc)), + NumEnums: 1, + NumMessages: 2, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_github_com_solo_io_gloo_projects_gloo_api_v1_options_set_filter_state_set_filter_state_proto_goTypes, + DependencyIndexes: file_github_com_solo_io_gloo_projects_gloo_api_v1_options_set_filter_state_set_filter_state_proto_depIdxs, + EnumInfos: file_github_com_solo_io_gloo_projects_gloo_api_v1_options_set_filter_state_set_filter_state_proto_enumTypes, + MessageInfos: file_github_com_solo_io_gloo_projects_gloo_api_v1_options_set_filter_state_set_filter_state_proto_msgTypes, + }.Build() + File_github_com_solo_io_gloo_projects_gloo_api_v1_options_set_filter_state_set_filter_state_proto = out.File + file_github_com_solo_io_gloo_projects_gloo_api_v1_options_set_filter_state_set_filter_state_proto_goTypes = nil + file_github_com_solo_io_gloo_projects_gloo_api_v1_options_set_filter_state_set_filter_state_proto_depIdxs = nil +} diff --git a/projects/gloo/pkg/api/v1/route_options.pb.clone.go b/projects/gloo/pkg/api/v1/route_options.pb.clone.go index eb0fce0515e..8254dada688 100644 --- a/projects/gloo/pkg/api/v1/route_options.pb.clone.go +++ b/projects/gloo/pkg/api/v1/route_options.pb.clone.go @@ -47,6 +47,8 @@ import ( github_com_solo_io_gloo_projects_gloo_pkg_api_v1_options_retries "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/retries" + github_com_solo_io_gloo_projects_gloo_pkg_api_v1_options_set_filter_state "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/set_filter_state" + github_com_solo_io_gloo_projects_gloo_pkg_api_v1_options_shadowing "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/shadowing" github_com_solo_io_gloo_projects_gloo_pkg_api_v1_options_tracing "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/tracing" @@ -255,6 +257,12 @@ func (m *RouteOptions) Clone() proto.Message { target.Ai = proto.Clone(m.GetAi()).(*github_com_solo_io_gloo_projects_gloo_pkg_api_v1_enterprise_options_ai.RouteSettings) } + if h, ok := interface{}(m.GetSetFilterState()).(clone.Cloner); ok { + target.SetFilterState = h.Clone().(*github_com_solo_io_gloo_projects_gloo_pkg_api_v1_options_set_filter_state.SetFilterState) + } else { + target.SetFilterState = proto.Clone(m.GetSetFilterState()).(*github_com_solo_io_gloo_projects_gloo_pkg_api_v1_options_set_filter_state.SetFilterState) + } + switch m.HostRewriteType.(type) { case *RouteOptions_HostRewrite: diff --git a/projects/gloo/pkg/api/v1/route_options.pb.equal.go b/projects/gloo/pkg/api/v1/route_options.pb.equal.go index 0799b58adc0..e786be331d1 100644 --- a/projects/gloo/pkg/api/v1/route_options.pb.equal.go +++ b/projects/gloo/pkg/api/v1/route_options.pb.equal.go @@ -330,6 +330,16 @@ func (m *RouteOptions) Equal(that interface{}) bool { } } + if h, ok := interface{}(m.GetSetFilterState()).(equality.Equalizer); ok { + if !h.Equal(target.GetSetFilterState()) { + return false + } + } else { + if !proto.Equal(m.GetSetFilterState(), target.GetSetFilterState()) { + return false + } + } + switch m.HostRewriteType.(type) { case *RouteOptions_HostRewrite: diff --git a/projects/gloo/pkg/api/v1/route_options.pb.go b/projects/gloo/pkg/api/v1/route_options.pb.go index 2cb91038e80..8dbaafd90d0 100644 --- a/projects/gloo/pkg/api/v1/route_options.pb.go +++ b/projects/gloo/pkg/api/v1/route_options.pb.go @@ -28,6 +28,7 @@ import ( lbhash "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/lbhash" protocol_upgrade "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/protocol_upgrade" retries "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/retries" + set_filter_state "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/set_filter_state" shadowing "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/shadowing" tracing "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/tracing" transformation "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/transformation" @@ -174,9 +175,11 @@ type RouteOptions struct { ExtProc *extproc.RouteSettings `protobuf:"bytes,30,opt,name=ext_proc,json=extProc,proto3" json:"ext_proc,omitempty"` // Enterprise-only: Settings to configure ai settings for a route. // These settings will only apply if the backend is an `ai` Upstream. - Ai *ai.RouteSettings `protobuf:"bytes,31,opt,name=ai,proto3" json:"ai,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + Ai *ai.RouteSettings `protobuf:"bytes,31,opt,name=ai,proto3" json:"ai,omitempty"` + // Settings to configure set-filter-state settings for a route. + SetFilterState *set_filter_state.SetFilterState `protobuf:"bytes,33,opt,name=set_filter_state,json=setFilterState,proto3" json:"set_filter_state,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RouteOptions) Reset() { @@ -552,6 +555,13 @@ func (x *RouteOptions) GetAi() *ai.RouteSettings { return nil } +func (x *RouteOptions) GetSetFilterState() *set_filter_state.SetFilterState { + if x != nil { + return x.SetFilterState + } + return nil +} + type isRouteOptions_HostRewriteType interface { isRouteOptions_HostRewriteType() } @@ -895,253 +905,265 @@ var file_github_com_solo_io_gloo_projects_gloo_api_v1_route_options_proto_rawDes 0x69, 0x6f, 0x2f, 0x67, 0x6c, 0x6f, 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x67, 0x6c, 0x6f, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, - 0x61, 0x69, 0x2f, 0x61, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, - 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, - 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xb8, 0x1d, 0x0a, 0x0c, 0x52, 0x6f, - 0x75, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x62, 0x0a, 0x0f, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, - 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, - 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0f, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3f, - 0x0a, 0x06, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, - 0x2e, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, - 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x52, 0x6f, 0x75, 0x74, - 0x65, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x52, 0x06, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x12, - 0x43, 0x0a, 0x0e, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x5f, 0x72, 0x65, 0x77, 0x72, 0x69, 0x74, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x52, 0x65, 0x77, - 0x72, 0x69, 0x74, 0x65, 0x12, 0x33, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x43, 0x0a, 0x07, 0x72, 0x65, 0x74, - 0x72, 0x69, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x72, 0x65, 0x74, - 0x72, 0x69, 0x65, 0x73, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, - 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x79, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x07, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x38, - 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, - 0x6f, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0a, 0x65, 0x78, - 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4c, 0x0a, 0x07, 0x74, 0x72, 0x61, 0x63, - 0x69, 0x6e, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x74, 0x72, 0x61, 0x63, - 0x69, 0x6e, 0x67, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, - 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x54, 0x72, - 0x61, 0x63, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x07, 0x74, - 0x72, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x12, 0x4c, 0x0a, 0x09, 0x73, 0x68, 0x61, 0x64, 0x6f, 0x77, - 0x69, 0x6e, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x73, 0x68, 0x61, 0x64, - 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, - 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, - 0x53, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x52, 0x09, 0x73, 0x68, 0x61, 0x64, 0x6f, - 0x77, 0x69, 0x6e, 0x67, 0x12, 0x61, 0x0a, 0x13, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x6d, - 0x61, 0x6e, 0x69, 0x70, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x30, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x6f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, - 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x61, 0x6e, 0x69, 0x70, 0x75, 0x6c, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x12, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x61, 0x6e, 0x69, 0x70, - 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0c, 0x68, 0x6f, 0x73, 0x74, 0x5f, - 0x72, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, - 0x0b, 0x68, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x48, 0x0a, 0x11, - 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x77, 0x72, 0x69, 0x74, - 0x65, 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, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x0f, 0x61, 0x75, 0x74, 0x6f, 0x48, 0x6f, 0x73, 0x74, 0x52, - 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x6f, 0x0a, 0x17, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x72, - 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x67, 0x65, - 0x78, 0x18, 0x65, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, - 0x6f, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x6d, 0x61, 0x74, - 0x63, 0x68, 0x65, 0x72, 0x2e, 0x76, 0x33, 0x2e, 0x52, 0x65, 0x67, 0x65, 0x78, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x41, 0x6e, 0x64, 0x53, 0x75, 0x62, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, 0x65, 0x48, - 0x00, 0x52, 0x14, 0x68, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x50, 0x61, - 0x74, 0x68, 0x52, 0x65, 0x67, 0x65, 0x78, 0x12, 0x4f, 0x0a, 0x13, 0x68, 0x6f, 0x73, 0x74, 0x5f, - 0x72, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x93, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x61, 0x69, 0x2f, 0x61, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x5c, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x6f, 0x6c, 0x6f, 0x2d, 0x69, 0x6f, 0x2f, + 0x67, 0x6c, 0x6f, 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x67, 0x6c, + 0x6f, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2f, 0x73, 0x65, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x2f, 0x73, 0x65, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, + 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, + 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x99, 0x1e, 0x0a, 0x0c, 0x52, 0x6f, 0x75, 0x74, + 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x62, 0x0a, 0x0f, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x34, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, + 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0f, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3f, 0x0a, 0x06, + 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x66, + 0x61, 0x75, 0x6c, 0x74, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, + 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x46, + 0x61, 0x75, 0x6c, 0x74, 0x73, 0x52, 0x06, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x43, 0x0a, + 0x0e, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x5f, 0x72, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x11, 0x68, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x77, 0x72, 0x69, - 0x74, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x52, 0x0a, 0x17, 0x61, 0x70, 0x70, 0x65, - 0x6e, 0x64, 0x5f, 0x78, 0x5f, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x65, 0x64, 0x5f, 0x68, - 0x6f, 0x73, 0x74, 0x18, 0x92, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, - 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x14, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x58, 0x46, - 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x65, 0x64, 0x48, 0x6f, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x04, - 0x63, 0x6f, 0x72, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x72, - 0x73, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, - 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x43, 0x6f, 0x72, 0x73, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x52, 0x04, 0x63, 0x6f, 0x72, 0x73, 0x12, 0x4b, 0x0a, 0x07, 0x6c, 0x62, 0x5f, 0x68, 0x61, - 0x73, 0x68, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x6c, 0x62, 0x68, 0x61, 0x73, - 0x68, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, - 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x48, 0x61, 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x6c, 0x62, - 0x48, 0x61, 0x73, 0x68, 0x12, 0x58, 0x0a, 0x08, 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x73, - 0x18, 0x15, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x5f, 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x08, 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x73, 0x12, 0x59, - 0x0a, 0x0f, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x62, 0x61, 0x73, 0x69, - 0x63, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, - 0x6d, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, - 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, - 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x0e, 0x72, 0x61, 0x74, 0x65, 0x6c, - 0x69, 0x6d, 0x69, 0x74, 0x42, 0x61, 0x73, 0x69, 0x63, 0x12, 0x63, 0x0a, 0x0f, 0x72, 0x61, 0x74, - 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x65, 0x61, 0x72, 0x6c, 0x79, 0x18, 0x8e, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x2e, + 0x6c, 0x75, 0x65, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x52, 0x65, 0x77, 0x72, 0x69, + 0x74, 0x65, 0x12, 0x33, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, + 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x43, 0x0a, 0x07, 0x72, 0x65, 0x74, 0x72, 0x69, + 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x72, 0x65, 0x74, 0x72, 0x69, + 0x65, 0x73, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, + 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x52, 0x07, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x38, 0x0a, 0x0a, + 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x18, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, + 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, + 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4c, 0x0a, 0x07, 0x74, 0x72, 0x61, 0x63, 0x69, 0x6e, + 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x69, 0x6e, + 0x67, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, + 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x54, 0x72, 0x61, 0x63, + 0x69, 0x6e, 0x67, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x07, 0x74, 0x72, 0x61, + 0x63, 0x69, 0x6e, 0x67, 0x12, 0x4c, 0x0a, 0x09, 0x73, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x69, 0x6e, + 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x73, 0x68, 0x61, 0x64, 0x6f, 0x77, + 0x69, 0x6e, 0x67, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, + 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x53, 0x68, + 0x61, 0x64, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x52, 0x09, 0x73, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x69, + 0x6e, 0x67, 0x12, 0x61, 0x0a, 0x13, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x6d, 0x61, 0x6e, + 0x69, 0x70, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x30, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x48, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x61, 0x6e, 0x69, 0x70, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x12, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x61, 0x6e, 0x69, 0x70, 0x75, 0x6c, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0c, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x72, 0x65, + 0x77, 0x72, 0x69, 0x74, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x68, + 0x6f, 0x73, 0x74, 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x48, 0x0a, 0x11, 0x61, 0x75, + 0x74, 0x6f, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 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, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x48, 0x00, 0x52, 0x0f, 0x61, 0x75, 0x74, 0x6f, 0x48, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x77, + 0x72, 0x69, 0x74, 0x65, 0x12, 0x6f, 0x0a, 0x17, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x77, + 0x72, 0x69, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x67, 0x65, 0x78, 0x18, + 0x65, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, + 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, + 0x65, 0x72, 0x2e, 0x76, 0x33, 0x2e, 0x52, 0x65, 0x67, 0x65, 0x78, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x41, 0x6e, 0x64, 0x53, 0x75, 0x62, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, 0x65, 0x48, 0x00, 0x52, + 0x14, 0x68, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x50, 0x61, 0x74, 0x68, + 0x52, 0x65, 0x67, 0x65, 0x78, 0x12, 0x4f, 0x0a, 0x13, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x72, 0x65, + 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x93, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x48, 0x00, 0x52, 0x11, 0x68, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, + 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x52, 0x0a, 0x17, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, + 0x5f, 0x78, 0x5f, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x65, 0x64, 0x5f, 0x68, 0x6f, 0x73, + 0x74, 0x18, 0x92, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x52, 0x14, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x58, 0x46, 0x6f, 0x72, + 0x77, 0x61, 0x72, 0x64, 0x65, 0x64, 0x48, 0x6f, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x04, 0x63, 0x6f, + 0x72, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x72, 0x73, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, - 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x6f, - 0x75, 0x74, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x01, 0x52, 0x0e, - 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x45, 0x61, 0x72, 0x6c, 0x79, 0x12, 0x6f, - 0x0a, 0x18, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x65, 0x61, 0x72, - 0x6c, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x8f, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x33, 0x2e, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x2e, 0x6f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, - 0x69, 0x6f, 0x2e, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x52, 0x65, 0x66, 0x73, 0x48, 0x01, 0x52, 0x15, 0x72, 0x61, 0x74, 0x65, 0x4c, 0x69, - 0x6d, 0x69, 0x74, 0x45, 0x61, 0x72, 0x6c, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, - 0x58, 0x0a, 0x09, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x8c, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x2e, + 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x43, 0x6f, 0x72, 0x73, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, + 0x04, 0x63, 0x6f, 0x72, 0x73, 0x12, 0x4b, 0x0a, 0x07, 0x6c, 0x62, 0x5f, 0x68, 0x61, 0x73, 0x68, + 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x6c, 0x62, 0x68, 0x61, 0x73, 0x68, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, - 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x6f, - 0x75, 0x74, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x02, 0x52, 0x09, - 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x64, 0x0a, 0x12, 0x72, 0x61, 0x74, - 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, - 0x8d, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, - 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, - 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, - 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x66, 0x73, 0x48, 0x02, 0x52, 0x10, 0x72, - 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, - 0x67, 0x0a, 0x11, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x67, - 0x75, 0x6c, 0x61, 0x72, 0x18, 0x90, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x72, 0x61, + 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x48, 0x61, 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x6c, 0x62, 0x48, 0x61, + 0x73, 0x68, 0x12, 0x58, 0x0a, 0x08, 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x73, 0x18, 0x15, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x5f, + 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x52, 0x08, 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x73, 0x12, 0x59, 0x0a, 0x0f, + 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x62, 0x61, 0x73, 0x69, 0x63, 0x18, + 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, + 0x74, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, + 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x61, + 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x0e, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, + 0x69, 0x74, 0x42, 0x61, 0x73, 0x69, 0x63, 0x12, 0x63, 0x0a, 0x0f, 0x72, 0x61, 0x74, 0x65, 0x6c, + 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x65, 0x61, 0x72, 0x6c, 0x79, 0x18, 0x8e, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x37, 0x2e, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x2e, 0x6f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, + 0x69, 0x6f, 0x2e, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x6f, 0x75, 0x74, + 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x01, 0x52, 0x0e, 0x72, 0x61, + 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x45, 0x61, 0x72, 0x6c, 0x79, 0x12, 0x6f, 0x0a, 0x18, + 0x72, 0x61, 0x74, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x65, 0x61, 0x72, 0x6c, 0x79, + 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x8f, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x33, 0x2e, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, + 0x2e, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x52, 0x65, 0x66, 0x73, 0x48, 0x01, 0x52, 0x15, 0x72, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, + 0x74, 0x45, 0x61, 0x72, 0x6c, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x58, 0x0a, + 0x09, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x8c, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x37, 0x2e, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x2e, 0x6f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, + 0x69, 0x6f, 0x2e, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x6f, 0x75, 0x74, + 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x02, 0x52, 0x09, 0x72, 0x61, + 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x64, 0x0a, 0x12, 0x72, 0x61, 0x74, 0x65, 0x5f, + 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x8d, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, + 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, + 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x66, 0x73, 0x48, 0x02, 0x52, 0x10, 0x72, 0x61, 0x74, + 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x67, 0x0a, + 0x11, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x67, 0x75, 0x6c, + 0x61, 0x72, 0x18, 0x90, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x72, 0x61, 0x74, 0x65, + 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, + 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x52, 0x61, 0x74, 0x65, 0x4c, + 0x69, 0x6d, 0x69, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, + 0x6f, 0x6e, 0x48, 0x03, 0x52, 0x10, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x52, + 0x65, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x12, 0x73, 0x0a, 0x1a, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x6c, + 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x73, 0x18, 0x91, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x52, 0x61, 0x74, - 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, - 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x03, 0x52, 0x10, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, - 0x74, 0x52, 0x65, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x12, 0x73, 0x0a, 0x1a, 0x72, 0x61, 0x74, 0x65, - 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x5f, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x91, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, - 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x52, - 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, - 0x66, 0x73, 0x48, 0x03, 0x52, 0x17, 0x72, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, - 0x65, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x34, 0x0a, - 0x03, 0x77, 0x61, 0x66, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x77, 0x61, 0x66, - 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, - 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x03, - 0x77, 0x61, 0x66, 0x12, 0x40, 0x0a, 0x03, 0x6a, 0x77, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x28, 0x2e, 0x6a, 0x77, 0x74, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, - 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x52, 0x6f, 0x75, 0x74, - 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x02, 0x18, 0x01, 0x48, 0x04, - 0x52, 0x03, 0x6a, 0x77, 0x74, 0x12, 0x52, 0x0a, 0x0a, 0x6a, 0x77, 0x74, 0x5f, 0x73, 0x74, 0x61, - 0x67, 0x65, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x6a, 0x77, 0x74, 0x2e, - 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, - 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x4a, 0x77, 0x74, 0x53, 0x74, 0x61, 0x67, 0x65, 0x64, 0x52, 0x6f, - 0x75, 0x74, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x04, 0x52, 0x09, - 0x6a, 0x77, 0x74, 0x53, 0x74, 0x61, 0x67, 0x65, 0x64, 0x12, 0x6e, 0x0a, 0x14, 0x6a, 0x77, 0x74, - 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x5f, 0x73, 0x74, 0x61, 0x67, 0x65, - 0x64, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x6a, 0x77, 0x74, 0x2e, 0x6f, 0x70, + 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x66, 0x73, + 0x48, 0x03, 0x52, 0x17, 0x72, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x67, + 0x75, 0x6c, 0x61, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x34, 0x0a, 0x03, 0x77, + 0x61, 0x66, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x77, 0x61, 0x66, 0x2e, 0x6f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, + 0x2e, 0x69, 0x6f, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x03, 0x77, 0x61, + 0x66, 0x12, 0x40, 0x0a, 0x03, 0x6a, 0x77, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, + 0x2e, 0x6a, 0x77, 0x74, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, + 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x45, + 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x02, 0x18, 0x01, 0x48, 0x04, 0x52, 0x03, + 0x6a, 0x77, 0x74, 0x12, 0x52, 0x0a, 0x0a, 0x6a, 0x77, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x67, 0x65, + 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x6a, 0x77, 0x74, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x4a, 0x77, 0x74, 0x53, 0x74, 0x61, 0x67, 0x65, 0x64, 0x52, 0x6f, 0x75, 0x74, - 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, - 0x69, 0x6f, 0x6e, 0x48, 0x04, 0x52, 0x12, 0x6a, 0x77, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x73, 0x53, 0x74, 0x61, 0x67, 0x65, 0x64, 0x12, 0x40, 0x0a, 0x04, 0x72, 0x62, 0x61, - 0x63, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x72, 0x62, 0x61, 0x63, 0x2e, 0x6f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, - 0x2e, 0x69, 0x6f, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, - 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x04, 0x72, 0x62, 0x61, 0x63, 0x12, 0x43, 0x0a, 0x07, 0x65, - 0x78, 0x74, 0x61, 0x75, 0x74, 0x68, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x65, - 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, - 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x45, 0x78, 0x74, 0x41, 0x75, 0x74, 0x68, 0x45, 0x78, - 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x65, 0x78, 0x74, 0x61, 0x75, 0x74, 0x68, - 0x12, 0x32, 0x0a, 0x03, 0x64, 0x6c, 0x70, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, - 0x64, 0x6c, 0x70, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, - 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x03, 0x64, 0x6c, 0x70, 0x12, 0x69, 0x0a, 0x10, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x70, - 0x65, 0x72, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, - 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x65, - 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x73, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2e, 0x76, 0x33, - 0x2e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x50, 0x65, 0x72, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, - 0x0e, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x50, 0x65, 0x72, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, - 0x4d, 0x0a, 0x04, 0x63, 0x73, 0x72, 0x66, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, - 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x65, 0x78, - 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, - 0x2e, 0x68, 0x74, 0x74, 0x70, 0x2e, 0x63, 0x73, 0x72, 0x66, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x73, - 0x72, 0x66, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x04, 0x63, 0x73, 0x72, 0x66, 0x12, 0x70, - 0x0a, 0x16, 0x73, 0x74, 0x61, 0x67, 0x65, 0x64, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, - 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, - 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, - 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x67, 0x65, 0x73, 0x52, 0x15, 0x73, 0x74, 0x61, 0x67, 0x65, - 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x54, 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x18, 0x1a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, - 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x4f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x6e, 0x76, 0x6f, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x5b, 0x0a, 0x0d, 0x72, 0x65, 0x67, 0x65, 0x78, 0x5f, - 0x72, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, - 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x74, 0x79, - 0x70, 0x65, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x72, 0x2e, 0x76, 0x33, 0x2e, 0x52, 0x65, - 0x67, 0x65, 0x78, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x41, 0x6e, 0x64, 0x53, 0x75, 0x62, 0x73, 0x74, - 0x69, 0x74, 0x75, 0x74, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x67, 0x65, 0x78, 0x52, 0x65, 0x77, 0x72, - 0x69, 0x74, 0x65, 0x12, 0x5c, 0x0a, 0x13, 0x6d, 0x61, 0x78, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2c, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, - 0x52, 0x6f, 0x75, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4d, 0x61, 0x78, - 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, - 0x6d, 0x61, 0x78, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x3c, 0x0a, 0x0c, 0x69, 0x64, 0x6c, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, - 0x74, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x0b, 0x69, 0x64, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, - 0x46, 0x0a, 0x08, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x63, 0x18, 0x1e, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2b, 0x2e, 0x65, 0x78, 0x74, 0x70, 0x72, 0x6f, 0x63, 0x2e, 0x6f, 0x70, 0x74, 0x69, + 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x04, 0x52, 0x09, 0x6a, 0x77, + 0x74, 0x53, 0x74, 0x61, 0x67, 0x65, 0x64, 0x12, 0x6e, 0x0a, 0x14, 0x6a, 0x77, 0x74, 0x5f, 0x70, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x5f, 0x73, 0x74, 0x61, 0x67, 0x65, 0x64, 0x18, + 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x6a, 0x77, 0x74, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, - 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x07, - 0x65, 0x78, 0x74, 0x50, 0x72, 0x6f, 0x63, 0x12, 0x36, 0x0a, 0x02, 0x61, 0x69, 0x18, 0x1f, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x69, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x4a, 0x77, 0x74, 0x53, 0x74, 0x61, 0x67, 0x65, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x50, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, + 0x6e, 0x48, 0x04, 0x52, 0x12, 0x6a, 0x77, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x73, 0x53, 0x74, 0x61, 0x67, 0x65, 0x64, 0x12, 0x40, 0x0a, 0x04, 0x72, 0x62, 0x61, 0x63, 0x18, + 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x72, 0x62, 0x61, 0x63, 0x2e, 0x6f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, + 0x6f, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x73, 0x52, 0x04, 0x72, 0x62, 0x61, 0x63, 0x12, 0x43, 0x0a, 0x07, 0x65, 0x78, 0x74, + 0x61, 0x75, 0x74, 0x68, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x65, 0x6e, 0x74, + 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, + 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x45, 0x78, 0x74, 0x41, 0x75, 0x74, 0x68, 0x45, 0x78, 0x74, 0x65, + 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x65, 0x78, 0x74, 0x61, 0x75, 0x74, 0x68, 0x12, 0x32, + 0x0a, 0x03, 0x64, 0x6c, 0x70, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x64, 0x6c, + 0x70, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, + 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x03, 0x64, + 0x6c, 0x70, 0x12, 0x69, 0x0a, 0x10, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x70, 0x65, 0x72, + 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x73, + 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x65, 0x78, 0x74, + 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x2e, + 0x68, 0x74, 0x74, 0x70, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2e, 0x76, 0x33, 0x2e, 0x42, + 0x75, 0x66, 0x66, 0x65, 0x72, 0x50, 0x65, 0x72, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x0e, 0x62, + 0x75, 0x66, 0x66, 0x65, 0x72, 0x50, 0x65, 0x72, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x4d, 0x0a, + 0x04, 0x63, 0x73, 0x72, 0x66, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x73, 0x6f, + 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x65, 0x78, 0x74, 0x65, + 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x68, + 0x74, 0x74, 0x70, 0x2e, 0x63, 0x73, 0x72, 0x66, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x73, 0x72, 0x66, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x04, 0x63, 0x73, 0x72, 0x66, 0x12, 0x70, 0x0a, 0x16, + 0x73, 0x74, 0x61, 0x67, 0x65, 0x64, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, + 0x69, 0x6f, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x53, 0x74, 0x61, 0x67, 0x65, 0x73, 0x52, 0x15, 0x73, 0x74, 0x61, 0x67, 0x65, 0x64, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x54, + 0x0a, 0x0e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x1a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, + 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2e, 0x45, 0x6e, 0x76, 0x6f, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x12, 0x5b, 0x0a, 0x0d, 0x72, 0x65, 0x67, 0x65, 0x78, 0x5f, 0x72, 0x65, + 0x77, 0x72, 0x69, 0x74, 0x65, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x73, 0x6f, + 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x74, 0x79, 0x70, 0x65, + 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x72, 0x2e, 0x76, 0x33, 0x2e, 0x52, 0x65, 0x67, 0x65, + 0x78, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x41, 0x6e, 0x64, 0x53, 0x75, 0x62, 0x73, 0x74, 0x69, 0x74, + 0x75, 0x74, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x67, 0x65, 0x78, 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x12, 0x5c, 0x0a, 0x13, 0x6d, 0x61, 0x78, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, + 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x52, 0x6f, - 0x75, 0x74, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x02, 0x61, 0x69, 0x1a, - 0x59, 0x0a, 0x12, 0x45, 0x6e, 0x76, 0x6f, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x88, 0x02, 0x0a, 0x11, 0x4d, - 0x61, 0x78, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x49, 0x0a, 0x13, 0x6d, 0x61, 0x78, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x64, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x6d, 0x61, 0x78, 0x53, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x50, 0x0a, 0x17, 0x67, - 0x72, 0x70, 0x63, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, + 0x75, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4d, 0x61, 0x78, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x6d, 0x61, + 0x78, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x3c, 0x0a, 0x0c, 0x69, 0x64, 0x6c, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, + 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x0b, 0x69, 0x64, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x46, 0x0a, + 0x08, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x63, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2b, 0x2e, 0x65, 0x78, 0x74, 0x70, 0x72, 0x6f, 0x63, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x52, + 0x6f, 0x75, 0x74, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x07, 0x65, 0x78, + 0x74, 0x50, 0x72, 0x6f, 0x63, 0x12, 0x36, 0x0a, 0x02, 0x61, 0x69, 0x18, 0x1f, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x69, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, + 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x52, 0x6f, 0x75, 0x74, + 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x02, 0x61, 0x69, 0x12, 0x5f, 0x0a, + 0x10, 0x73, 0x65, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x18, 0x21, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x73, 0x65, 0x74, 0x5f, 0x66, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, + 0x53, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0e, + 0x73, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x1a, 0x59, + 0x0a, 0x12, 0x45, 0x6e, 0x76, 0x6f, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x88, 0x02, 0x0a, 0x11, 0x4d, 0x61, + 0x78, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x49, 0x0a, 0x13, 0x6d, 0x61, 0x78, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x64, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x14, 0x67, 0x72, 0x70, 0x63, 0x54, 0x69, 0x6d, - 0x65, 0x6f, 0x75, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x61, 0x78, 0x12, 0x56, 0x0a, - 0x1a, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x68, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x17, 0x67, 0x72, - 0x70, 0x63, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4f, - 0x66, 0x66, 0x73, 0x65, 0x74, 0x42, 0x13, 0x0a, 0x11, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x72, 0x65, - 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x42, 0x1e, 0x0a, 0x1c, 0x72, 0x61, - 0x74, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x65, 0x61, 0x72, 0x6c, 0x79, 0x5f, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x42, 0x18, 0x0a, 0x16, 0x72, 0x61, - 0x74, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x42, 0x20, 0x0a, 0x1e, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x6c, 0x69, 0x6d, - 0x69, 0x74, 0x5f, 0x72, 0x65, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x42, 0x0c, 0x0a, 0x0a, 0x6a, 0x77, 0x74, 0x5f, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x42, 0x3e, 0xb8, 0xf5, 0x04, 0x01, 0xc0, 0xf5, 0x04, 0x01, 0xd0, 0xf5, - 0x04, 0x01, 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, - 0x6f, 0x6c, 0x6f, 0x2d, 0x69, 0x6f, 0x2f, 0x67, 0x6c, 0x6f, 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x73, 0x2f, 0x67, 0x6c, 0x6f, 0x6f, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x6d, 0x61, 0x78, 0x53, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x50, 0x0a, 0x17, 0x67, 0x72, + 0x70, 0x63, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x14, 0x67, 0x72, 0x70, 0x63, 0x54, 0x69, 0x6d, 0x65, + 0x6f, 0x75, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x61, 0x78, 0x12, 0x56, 0x0a, 0x1a, + 0x67, 0x72, 0x70, 0x63, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x68, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x17, 0x67, 0x72, 0x70, + 0x63, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x66, + 0x66, 0x73, 0x65, 0x74, 0x42, 0x13, 0x0a, 0x11, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x77, + 0x72, 0x69, 0x74, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x42, 0x1e, 0x0a, 0x1c, 0x72, 0x61, 0x74, + 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x65, 0x61, 0x72, 0x6c, 0x79, 0x5f, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x42, 0x18, 0x0a, 0x16, 0x72, 0x61, 0x74, + 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x42, 0x20, 0x0a, 0x1e, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, + 0x74, 0x5f, 0x72, 0x65, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x5f, 0x74, 0x79, 0x70, 0x65, 0x42, 0x0c, 0x0a, 0x0a, 0x6a, 0x77, 0x74, 0x5f, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x42, 0x3e, 0xb8, 0xf5, 0x04, 0x01, 0xc0, 0xf5, 0x04, 0x01, 0xd0, 0xf5, 0x04, + 0x01, 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x6f, + 0x6c, 0x6f, 0x2d, 0x69, 0x6f, 0x2f, 0x67, 0x6c, 0x6f, 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x73, 0x2f, 0x67, 0x6c, 0x6f, 0x6f, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, }) var ( @@ -1190,7 +1212,8 @@ var file_github_com_solo_io_gloo_projects_gloo_api_v1_route_options_proto_goType (*transformation.TransformationStages)(nil), // 29: transformation.options.gloo.solo.io.TransformationStages (*extproc.RouteSettings)(nil), // 30: extproc.options.gloo.solo.io.RouteSettings (*ai.RouteSettings)(nil), // 31: ai.options.gloo.solo.io.RouteSettings - (*structpb.Struct)(nil), // 32: google.protobuf.Struct + (*set_filter_state.SetFilterState)(nil), // 32: set_filter_state.options.gloo.solo.io.SetFilterState + (*structpb.Struct)(nil), // 33: google.protobuf.Struct } var file_github_com_solo_io_gloo_projects_gloo_api_v1_route_options_proto_depIdxs = []int32{ 3, // 0: gloo.solo.io.RouteOptions.transformations:type_name -> transformation.options.gloo.solo.io.Transformations @@ -1232,15 +1255,16 @@ var file_github_com_solo_io_gloo_projects_gloo_api_v1_route_options_proto_depIdx 6, // 36: gloo.solo.io.RouteOptions.idle_timeout:type_name -> google.protobuf.Duration 30, // 37: gloo.solo.io.RouteOptions.ext_proc:type_name -> extproc.options.gloo.solo.io.RouteSettings 31, // 38: gloo.solo.io.RouteOptions.ai:type_name -> ai.options.gloo.solo.io.RouteSettings - 32, // 39: gloo.solo.io.RouteOptions.EnvoyMetadataEntry.value:type_name -> google.protobuf.Struct - 6, // 40: gloo.solo.io.RouteOptions.MaxStreamDuration.max_stream_duration:type_name -> google.protobuf.Duration - 6, // 41: gloo.solo.io.RouteOptions.MaxStreamDuration.grpc_timeout_header_max:type_name -> google.protobuf.Duration - 6, // 42: gloo.solo.io.RouteOptions.MaxStreamDuration.grpc_timeout_header_offset:type_name -> google.protobuf.Duration - 43, // [43:43] is the sub-list for method output_type - 43, // [43:43] is the sub-list for method input_type - 43, // [43:43] is the sub-list for extension type_name - 43, // [43:43] is the sub-list for extension extendee - 0, // [0:43] is the sub-list for field type_name + 32, // 39: gloo.solo.io.RouteOptions.set_filter_state:type_name -> set_filter_state.options.gloo.solo.io.SetFilterState + 33, // 40: gloo.solo.io.RouteOptions.EnvoyMetadataEntry.value:type_name -> google.protobuf.Struct + 6, // 41: gloo.solo.io.RouteOptions.MaxStreamDuration.max_stream_duration:type_name -> google.protobuf.Duration + 6, // 42: gloo.solo.io.RouteOptions.MaxStreamDuration.grpc_timeout_header_max:type_name -> google.protobuf.Duration + 6, // 43: gloo.solo.io.RouteOptions.MaxStreamDuration.grpc_timeout_header_offset:type_name -> google.protobuf.Duration + 44, // [44:44] is the sub-list for method output_type + 44, // [44:44] is the sub-list for method input_type + 44, // [44:44] is the sub-list for extension type_name + 44, // [44:44] is the sub-list for extension extendee + 0, // [0:44] is the sub-list for field type_name } func init() { file_github_com_solo_io_gloo_projects_gloo_api_v1_route_options_proto_init() } diff --git a/projects/gloo/pkg/api/v1/route_options.pb.hash.go b/projects/gloo/pkg/api/v1/route_options.pb.hash.go index eef37287e71..7fa85db5863 100644 --- a/projects/gloo/pkg/api/v1/route_options.pb.hash.go +++ b/projects/gloo/pkg/api/v1/route_options.pb.hash.go @@ -605,6 +605,26 @@ func (m *RouteOptions) Hash(hasher hash.Hash64) (uint64, error) { } } + if h, ok := interface{}(m.GetSetFilterState()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("SetFilterState")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSetFilterState(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("SetFilterState")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + switch m.HostRewriteType.(type) { case *RouteOptions_HostRewrite: diff --git a/projects/gloo/pkg/api/v1/route_options.pb.uniquehash.go b/projects/gloo/pkg/api/v1/route_options.pb.uniquehash.go index c3eeab5acb6..a3702a20c34 100644 --- a/projects/gloo/pkg/api/v1/route_options.pb.uniquehash.go +++ b/projects/gloo/pkg/api/v1/route_options.pb.uniquehash.go @@ -615,6 +615,26 @@ func (m *RouteOptions) HashUnique(hasher hash.Hash64) (uint64, error) { } } + if h, ok := interface{}(m.GetSetFilterState()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("SetFilterState")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSetFilterState(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("SetFilterState")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + switch m.HostRewriteType.(type) { case *RouteOptions_HostRewrite: diff --git a/projects/gloo/pkg/api/v1/virtual_host_options.pb.clone.go b/projects/gloo/pkg/api/v1/virtual_host_options.pb.clone.go index ad493eb8650..fc44ca93e67 100644 --- a/projects/gloo/pkg/api/v1/virtual_host_options.pb.clone.go +++ b/projects/gloo/pkg/api/v1/virtual_host_options.pb.clone.go @@ -37,6 +37,8 @@ import ( github_com_solo_io_gloo_projects_gloo_pkg_api_v1_options_retries "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/retries" + github_com_solo_io_gloo_projects_gloo_pkg_api_v1_options_set_filter_state "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/set_filter_state" + github_com_solo_io_gloo_projects_gloo_pkg_api_v1_options_stats "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/stats" github_com_solo_io_gloo_projects_gloo_pkg_api_v1_options_transformation "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/transformation" @@ -171,6 +173,12 @@ func (m *VirtualHostOptions) Clone() proto.Message { target.CorsPolicyMergeSettings = proto.Clone(m.GetCorsPolicyMergeSettings()).(*github_com_solo_io_gloo_projects_gloo_pkg_api_v1_options_cors.CorsPolicyMergeSettings) } + if h, ok := interface{}(m.GetSetFilterState()).(clone.Cloner); ok { + target.SetFilterState = h.Clone().(*github_com_solo_io_gloo_projects_gloo_pkg_api_v1_options_set_filter_state.SetFilterState) + } else { + target.SetFilterState = proto.Clone(m.GetSetFilterState()).(*github_com_solo_io_gloo_projects_gloo_pkg_api_v1_options_set_filter_state.SetFilterState) + } + switch m.RateLimitEarlyConfigType.(type) { case *VirtualHostOptions_RatelimitEarly: diff --git a/projects/gloo/pkg/api/v1/virtual_host_options.pb.equal.go b/projects/gloo/pkg/api/v1/virtual_host_options.pb.equal.go index 0a034061dea..5875157df34 100644 --- a/projects/gloo/pkg/api/v1/virtual_host_options.pb.equal.go +++ b/projects/gloo/pkg/api/v1/virtual_host_options.pb.equal.go @@ -226,6 +226,16 @@ func (m *VirtualHostOptions) Equal(that interface{}) bool { } } + if h, ok := interface{}(m.GetSetFilterState()).(equality.Equalizer); ok { + if !h.Equal(target.GetSetFilterState()) { + return false + } + } else { + if !proto.Equal(m.GetSetFilterState(), target.GetSetFilterState()) { + return false + } + } + switch m.RateLimitEarlyConfigType.(type) { case *VirtualHostOptions_RatelimitEarly: diff --git a/projects/gloo/pkg/api/v1/virtual_host_options.pb.go b/projects/gloo/pkg/api/v1/virtual_host_options.pb.go index ccb2fc2dfea..c3eea941f62 100644 --- a/projects/gloo/pkg/api/v1/virtual_host_options.pb.go +++ b/projects/gloo/pkg/api/v1/virtual_host_options.pb.go @@ -23,6 +23,7 @@ import ( cors "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/cors" headers "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/headers" retries "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/retries" + set_filter_state "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/set_filter_state" stats "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/stats" transformation "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/transformation" _ "github.com/solo-io/protoc-gen-ext/extproto" @@ -130,8 +131,11 @@ type VirtualHostOptions struct { ExtProc *extproc.RouteSettings `protobuf:"bytes,30,opt,name=ext_proc,json=extProc,proto3" json:"ext_proc,omitempty"` // Settings for determining merge strategy for CORS settings when present at both Route and VirtualHost levels. CorsPolicyMergeSettings *cors.CorsPolicyMergeSettings `protobuf:"bytes,20,opt,name=cors_policy_merge_settings,json=corsPolicyMergeSettings,proto3" json:"cors_policy_merge_settings,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // SetFilterState can be used to set filter state on the request. + // For more, see https://www.envoyproxy.io/docs/envoy/latest/api-v2/config/filter/http/set_filter_state/v2/set_filter_state.proto + SetFilterState *set_filter_state.SetFilterState `protobuf:"bytes,21,opt,name=set_filter_state,json=setFilterState,proto3" json:"set_filter_state,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *VirtualHostOptions) Reset() { @@ -392,6 +396,13 @@ func (x *VirtualHostOptions) GetCorsPolicyMergeSettings() *cors.CorsPolicyMergeS return nil } +func (x *VirtualHostOptions) GetSetFilterState() *set_filter_state.SetFilterState { + if x != nil { + return x.SetFilterState + } + return nil +} + type isVirtualHostOptions_RateLimitEarlyConfigType interface { isVirtualHostOptions_RateLimitEarlyConfigType() } @@ -581,160 +592,172 @@ var file_github_com_solo_io_gloo_projects_gloo_api_v1_virtual_host_options_proto 0x6f, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x65, 0x78, 0x74, 0x70, 0x72, 0x6f, 0x63, 0x2f, 0x65, 0x78, 0x74, 0x70, 0x72, 0x6f, 0x63, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x22, 0xb2, 0x12, 0x0a, 0x12, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x48, 0x6f, - 0x73, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x38, 0x0a, 0x0a, 0x65, 0x78, 0x74, - 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, - 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x45, 0x78, 0x74, - 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x43, 0x0a, 0x07, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x73, 0x2e, 0x6f, + 0x74, 0x6f, 0x1a, 0x5c, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, + 0x6f, 0x6c, 0x6f, 0x2d, 0x69, 0x6f, 0x2f, 0x67, 0x6c, 0x6f, 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x73, 0x2f, 0x67, 0x6c, 0x6f, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, + 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x73, 0x65, 0x74, 0x5f, 0x66, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x73, 0x65, 0x74, 0x5f, 0x66, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x22, 0x93, 0x13, 0x0a, 0x12, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x48, 0x6f, 0x73, 0x74, + 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x38, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x6c, + 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0x43, 0x0a, 0x07, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x73, 0x2e, 0x6f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, + 0x6f, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x07, 0x72, + 0x65, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x37, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x6f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, + 0x69, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x12, + 0x61, 0x0a, 0x13, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x6d, 0x61, 0x6e, 0x69, 0x70, 0x75, + 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x68, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, + 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x48, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x4d, 0x61, 0x6e, 0x69, 0x70, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x12, + 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x61, 0x6e, 0x69, 0x70, 0x75, 0x6c, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x04, 0x63, 0x6f, 0x72, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x72, 0x73, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x43, 0x6f, 0x72, + 0x73, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x04, 0x63, 0x6f, 0x72, 0x73, 0x12, 0x62, 0x0a, + 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x02, 0x18, 0x01, + 0x52, 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0x59, 0x0a, 0x0f, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x62, + 0x61, 0x73, 0x69, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x72, 0x61, 0x74, + 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, + 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x49, 0x6e, 0x67, 0x72, + 0x65, 0x73, 0x73, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x0e, 0x72, 0x61, + 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x42, 0x61, 0x73, 0x69, 0x63, 0x12, 0x62, 0x0a, 0x0f, + 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x65, 0x61, 0x72, 0x6c, 0x79, 0x18, + 0x48, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, + 0x74, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, + 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, + 0x56, 0x68, 0x6f, 0x73, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x00, + 0x52, 0x0e, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x45, 0x61, 0x72, 0x6c, 0x79, + 0x12, 0x6e, 0x0a, 0x18, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x65, + 0x61, 0x72, 0x6c, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x49, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, - 0x2e, 0x69, 0x6f, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, - 0x07, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x37, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, - 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x73, 0x2e, + 0x2e, 0x69, 0x6f, 0x2e, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x52, 0x65, 0x66, 0x73, 0x48, 0x00, 0x52, 0x15, 0x72, 0x61, 0x74, 0x65, 0x4c, + 0x69, 0x6d, 0x69, 0x74, 0x45, 0x61, 0x72, 0x6c, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, + 0x12, 0x57, 0x0a, 0x09, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x46, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, - 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, - 0x73, 0x12, 0x61, 0x0a, 0x13, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x6d, 0x61, 0x6e, 0x69, - 0x70, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, - 0x2e, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x48, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x4d, 0x61, 0x6e, 0x69, 0x70, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x12, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x61, 0x6e, 0x69, 0x70, 0x75, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x04, 0x63, 0x6f, 0x72, 0x73, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x72, 0x73, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x43, - 0x6f, 0x72, 0x73, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x04, 0x63, 0x6f, 0x72, 0x73, 0x12, - 0x62, 0x0a, 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x02, - 0x18, 0x01, 0x52, 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x59, 0x0a, 0x0f, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, - 0x5f, 0x62, 0x61, 0x73, 0x69, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x72, - 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x49, 0x6e, - 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x0e, - 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x42, 0x61, 0x73, 0x69, 0x63, 0x12, 0x62, - 0x0a, 0x0f, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x65, 0x61, 0x72, 0x6c, - 0x79, 0x18, 0x48, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, - 0x6d, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, - 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, - 0x69, 0x74, 0x56, 0x68, 0x6f, 0x73, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, - 0x48, 0x00, 0x52, 0x0e, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x45, 0x61, 0x72, - 0x6c, 0x79, 0x12, 0x6e, 0x0a, 0x18, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, - 0x5f, 0x65, 0x61, 0x72, 0x6c, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x49, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, - 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, - 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x66, 0x73, 0x48, 0x00, 0x52, 0x15, 0x72, 0x61, 0x74, - 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x45, 0x61, 0x72, 0x6c, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x73, 0x12, 0x57, 0x0a, 0x09, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, - 0x46, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, + 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x56, 0x68, + 0x6f, 0x73, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x01, 0x52, 0x09, + 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x63, 0x0a, 0x12, 0x72, 0x61, 0x74, + 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, + 0x47, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, - 0x56, 0x68, 0x6f, 0x73, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x01, - 0x52, 0x09, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x63, 0x0a, 0x12, 0x72, - 0x61, 0x74, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x73, 0x18, 0x47, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, - 0x6d, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, - 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, - 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x66, 0x73, 0x48, 0x01, 0x52, 0x10, - 0x72, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, - 0x12, 0x66, 0x0a, 0x11, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x72, 0x65, - 0x67, 0x75, 0x6c, 0x61, 0x72, 0x18, 0x4a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x72, 0x61, - 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x52, 0x61, 0x74, - 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x56, 0x68, 0x6f, 0x73, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, - 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x02, 0x52, 0x10, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, - 0x74, 0x52, 0x65, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x12, 0x72, 0x0a, 0x1a, 0x72, 0x61, 0x74, 0x65, - 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x5f, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x4b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x72, - 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x52, 0x61, - 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x66, - 0x73, 0x48, 0x02, 0x52, 0x17, 0x72, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x65, - 0x67, 0x75, 0x6c, 0x61, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x34, 0x0a, 0x03, - 0x77, 0x61, 0x66, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x77, 0x61, 0x66, 0x2e, - 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, - 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x03, 0x77, - 0x61, 0x66, 0x12, 0x40, 0x0a, 0x03, 0x6a, 0x77, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x28, 0x2e, 0x6a, 0x77, 0x74, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, - 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x56, 0x68, 0x6f, 0x73, 0x74, - 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x02, 0x18, 0x01, 0x48, 0x03, 0x52, - 0x03, 0x6a, 0x77, 0x74, 0x12, 0x52, 0x0a, 0x0a, 0x6a, 0x77, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x67, - 0x65, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x6a, 0x77, 0x74, 0x2e, 0x6f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, - 0x2e, 0x69, 0x6f, 0x2e, 0x4a, 0x77, 0x74, 0x53, 0x74, 0x61, 0x67, 0x65, 0x64, 0x56, 0x68, 0x6f, - 0x73, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x03, 0x52, 0x09, 0x6a, - 0x77, 0x74, 0x53, 0x74, 0x61, 0x67, 0x65, 0x64, 0x12, 0x40, 0x0a, 0x04, 0x72, 0x62, 0x61, 0x63, - 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x72, 0x62, 0x61, 0x63, 0x2e, 0x6f, 0x70, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x66, 0x73, 0x48, 0x01, 0x52, 0x10, 0x72, 0x61, + 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x66, + 0x0a, 0x11, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x67, 0x75, + 0x6c, 0x61, 0x72, 0x18, 0x4a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x72, 0x61, 0x74, 0x65, + 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, + 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x52, 0x61, 0x74, 0x65, 0x4c, + 0x69, 0x6d, 0x69, 0x74, 0x56, 0x68, 0x6f, 0x73, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, + 0x6f, 0x6e, 0x48, 0x02, 0x52, 0x10, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x52, + 0x65, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x12, 0x72, 0x0a, 0x1a, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x6c, + 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x73, 0x18, 0x4b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x72, 0x61, 0x74, + 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, + 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x52, 0x61, 0x74, 0x65, + 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x66, 0x73, 0x48, + 0x02, 0x52, 0x17, 0x72, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x67, 0x75, + 0x6c, 0x61, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x34, 0x0a, 0x03, 0x77, 0x61, + 0x66, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x77, 0x61, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, - 0x69, 0x6f, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, - 0x69, 0x6e, 0x67, 0x73, 0x52, 0x04, 0x72, 0x62, 0x61, 0x63, 0x12, 0x43, 0x0a, 0x07, 0x65, 0x78, - 0x74, 0x61, 0x75, 0x74, 0x68, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x65, 0x6e, - 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, - 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x45, 0x78, 0x74, 0x41, 0x75, 0x74, 0x68, 0x45, 0x78, 0x74, - 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x65, 0x78, 0x74, 0x61, 0x75, 0x74, 0x68, 0x12, - 0x32, 0x0a, 0x03, 0x64, 0x6c, 0x70, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x64, - 0x6c, 0x70, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, - 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x03, - 0x64, 0x6c, 0x70, 0x12, 0x69, 0x0a, 0x10, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x70, 0x65, - 0x72, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, - 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x65, 0x78, - 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, - 0x2e, 0x68, 0x74, 0x74, 0x70, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2e, 0x76, 0x33, 0x2e, - 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x50, 0x65, 0x72, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x0e, - 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x50, 0x65, 0x72, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x4d, - 0x0a, 0x04, 0x63, 0x73, 0x72, 0x66, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x73, - 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x65, 0x78, 0x74, - 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x2e, - 0x68, 0x74, 0x74, 0x70, 0x2e, 0x63, 0x73, 0x72, 0x66, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x73, 0x72, - 0x66, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x04, 0x63, 0x73, 0x72, 0x66, 0x12, 0x5d, 0x0a, - 0x1d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x5f, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0f, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x52, 0x1a, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x64, 0x0a, 0x21, - 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x5f, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x52, 0x1d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x41, 0x74, 0x74, 0x65, - 0x6d, 0x70, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x70, 0x0a, 0x16, 0x73, 0x74, 0x61, 0x67, 0x65, 0x64, 0x5f, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x11, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, - 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, - 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x67, 0x65, 0x73, 0x52, 0x15, 0x73, - 0x74, 0x61, 0x67, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x46, 0x0a, 0x08, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x63, - 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x65, 0x78, 0x74, 0x70, 0x72, 0x6f, 0x63, + 0x69, 0x6f, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x03, 0x77, 0x61, 0x66, + 0x12, 0x40, 0x0a, 0x03, 0x6a, 0x77, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, + 0x6a, 0x77, 0x74, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, + 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x56, 0x68, 0x6f, 0x73, 0x74, 0x45, 0x78, + 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x02, 0x18, 0x01, 0x48, 0x03, 0x52, 0x03, 0x6a, + 0x77, 0x74, 0x12, 0x52, 0x0a, 0x0a, 0x6a, 0x77, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x67, 0x65, 0x64, + 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x6a, 0x77, 0x74, 0x2e, 0x6f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, + 0x6f, 0x2e, 0x4a, 0x77, 0x74, 0x53, 0x74, 0x61, 0x67, 0x65, 0x64, 0x56, 0x68, 0x6f, 0x73, 0x74, + 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x03, 0x52, 0x09, 0x6a, 0x77, 0x74, + 0x53, 0x74, 0x61, 0x67, 0x65, 0x64, 0x12, 0x40, 0x0a, 0x04, 0x72, 0x62, 0x61, 0x63, 0x18, 0x0b, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x72, 0x62, 0x61, 0x63, 0x2e, 0x6f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, + 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, + 0x67, 0x73, 0x52, 0x04, 0x72, 0x62, 0x61, 0x63, 0x12, 0x43, 0x0a, 0x07, 0x65, 0x78, 0x74, 0x61, + 0x75, 0x74, 0x68, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x65, 0x6e, 0x74, 0x65, + 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, + 0x2e, 0x69, 0x6f, 0x2e, 0x45, 0x78, 0x74, 0x41, 0x75, 0x74, 0x68, 0x45, 0x78, 0x74, 0x65, 0x6e, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x65, 0x78, 0x74, 0x61, 0x75, 0x74, 0x68, 0x12, 0x32, 0x0a, + 0x03, 0x64, 0x6c, 0x70, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x64, 0x6c, 0x70, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, - 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, - 0x6e, 0x67, 0x73, 0x52, 0x07, 0x65, 0x78, 0x74, 0x50, 0x72, 0x6f, 0x63, 0x12, 0x6f, 0x0a, 0x1a, - 0x63, 0x6f, 0x72, 0x73, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x6d, 0x65, 0x72, 0x67, - 0x65, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x32, 0x2e, 0x63, 0x6f, 0x72, 0x73, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x43, 0x6f, 0x72, - 0x73, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, - 0x69, 0x6e, 0x67, 0x73, 0x52, 0x17, 0x63, 0x6f, 0x72, 0x73, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x4d, 0x65, 0x72, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x42, 0x1e, 0x0a, - 0x1c, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x65, 0x61, 0x72, 0x6c, - 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x42, 0x18, 0x0a, - 0x16, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x42, 0x20, 0x0a, 0x1e, 0x72, 0x61, 0x74, 0x65, 0x5f, - 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x5f, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x42, 0x0c, 0x0a, 0x0a, 0x6a, 0x77, 0x74, - 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x3e, 0xb8, 0xf5, 0x04, 0x01, 0xc0, 0xf5, 0x04, - 0x01, 0xd0, 0xf5, 0x04, 0x01, 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x73, 0x6f, 0x6c, 0x6f, 0x2d, 0x69, 0x6f, 0x2f, 0x67, 0x6c, 0x6f, 0x6f, 0x2f, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x67, 0x6c, 0x6f, 0x6f, 0x2f, 0x70, 0x6b, 0x67, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x03, 0x64, 0x6c, + 0x70, 0x12, 0x69, 0x0a, 0x10, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x70, 0x65, 0x72, 0x5f, + 0x72, 0x6f, 0x75, 0x74, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x73, 0x6f, + 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x65, 0x78, 0x74, 0x65, + 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x68, + 0x74, 0x74, 0x70, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2e, 0x76, 0x33, 0x2e, 0x42, 0x75, + 0x66, 0x66, 0x65, 0x72, 0x50, 0x65, 0x72, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x0e, 0x62, 0x75, + 0x66, 0x66, 0x65, 0x72, 0x50, 0x65, 0x72, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x4d, 0x0a, 0x04, + 0x63, 0x73, 0x72, 0x66, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x73, 0x6f, 0x6c, + 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x68, 0x74, + 0x74, 0x70, 0x2e, 0x63, 0x73, 0x72, 0x66, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x73, 0x72, 0x66, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x04, 0x63, 0x73, 0x72, 0x66, 0x12, 0x5d, 0x0a, 0x1d, 0x69, + 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x61, + 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0f, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1a, + 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x74, + 0x74, 0x65, 0x6d, 0x70, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x64, 0x0a, 0x21, 0x69, 0x6e, + 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x5f, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, + 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x52, 0x1d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, + 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x70, 0x0a, 0x16, 0x73, 0x74, 0x61, 0x67, 0x65, 0x64, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x39, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, + 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x67, 0x65, 0x73, 0x52, 0x15, 0x73, 0x74, 0x61, + 0x67, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0x46, 0x0a, 0x08, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x63, 0x18, 0x1e, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x65, 0x78, 0x74, 0x70, 0x72, 0x6f, 0x63, 0x2e, 0x6f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, + 0x2e, 0x69, 0x6f, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x73, 0x52, 0x07, 0x65, 0x78, 0x74, 0x50, 0x72, 0x6f, 0x63, 0x12, 0x6f, 0x0a, 0x1a, 0x63, 0x6f, + 0x72, 0x73, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x5f, + 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, + 0x2e, 0x63, 0x6f, 0x72, 0x73, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, + 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x43, 0x6f, 0x72, 0x73, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, + 0x67, 0x73, 0x52, 0x17, 0x63, 0x6f, 0x72, 0x73, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4d, 0x65, + 0x72, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x5f, 0x0a, 0x10, 0x73, + 0x65, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, + 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x73, 0x65, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x53, 0x65, + 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0e, 0x73, 0x65, + 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x42, 0x1e, 0x0a, 0x1c, + 0x72, 0x61, 0x74, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x65, 0x61, 0x72, 0x6c, 0x79, + 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x42, 0x18, 0x0a, 0x16, + 0x72, 0x61, 0x74, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x42, 0x20, 0x0a, 0x1e, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x6c, + 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x42, 0x0c, 0x0a, 0x0a, 0x6a, 0x77, 0x74, 0x5f, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x3e, 0xb8, 0xf5, 0x04, 0x01, 0xc0, 0xf5, 0x04, 0x01, + 0xd0, 0xf5, 0x04, 0x01, 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x73, 0x6f, 0x6c, 0x6f, 0x2d, 0x69, 0x6f, 0x2f, 0x67, 0x6c, 0x6f, 0x6f, 0x2f, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x67, 0x6c, 0x6f, 0x6f, 0x2f, 0x70, 0x6b, 0x67, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, }) var ( @@ -773,6 +796,7 @@ var file_github_com_solo_io_gloo_projects_gloo_api_v1_virtual_host_options_proto (*transformation.TransformationStages)(nil), // 19: transformation.options.gloo.solo.io.TransformationStages (*extproc.RouteSettings)(nil), // 20: extproc.options.gloo.solo.io.RouteSettings (*cors.CorsPolicyMergeSettings)(nil), // 21: cors.options.gloo.solo.io.CorsPolicyMergeSettings + (*set_filter_state.SetFilterState)(nil), // 22: set_filter_state.options.gloo.solo.io.SetFilterState } var file_github_com_solo_io_gloo_projects_gloo_api_v1_virtual_host_options_proto_depIdxs = []int32{ 1, // 0: gloo.solo.io.VirtualHostOptions.extensions:type_name -> gloo.solo.io.Extensions @@ -801,11 +825,12 @@ var file_github_com_solo_io_gloo_projects_gloo_api_v1_virtual_host_options_proto 19, // 23: gloo.solo.io.VirtualHostOptions.staged_transformations:type_name -> transformation.options.gloo.solo.io.TransformationStages 20, // 24: gloo.solo.io.VirtualHostOptions.ext_proc:type_name -> extproc.options.gloo.solo.io.RouteSettings 21, // 25: gloo.solo.io.VirtualHostOptions.cors_policy_merge_settings:type_name -> cors.options.gloo.solo.io.CorsPolicyMergeSettings - 26, // [26:26] is the sub-list for method output_type - 26, // [26:26] is the sub-list for method input_type - 26, // [26:26] is the sub-list for extension type_name - 26, // [26:26] is the sub-list for extension extendee - 0, // [0:26] is the sub-list for field type_name + 22, // 26: gloo.solo.io.VirtualHostOptions.set_filter_state:type_name -> set_filter_state.options.gloo.solo.io.SetFilterState + 27, // [27:27] is the sub-list for method output_type + 27, // [27:27] is the sub-list for method input_type + 27, // [27:27] is the sub-list for extension type_name + 27, // [27:27] is the sub-list for extension extendee + 0, // [0:27] is the sub-list for field type_name } func init() { file_github_com_solo_io_gloo_projects_gloo_api_v1_virtual_host_options_proto_init() } diff --git a/projects/gloo/pkg/api/v1/virtual_host_options.pb.hash.go b/projects/gloo/pkg/api/v1/virtual_host_options.pb.hash.go index bae3c82bcdd..730b293bb01 100644 --- a/projects/gloo/pkg/api/v1/virtual_host_options.pb.hash.go +++ b/projects/gloo/pkg/api/v1/virtual_host_options.pb.hash.go @@ -402,6 +402,26 @@ func (m *VirtualHostOptions) Hash(hasher hash.Hash64) (uint64, error) { } } + if h, ok := interface{}(m.GetSetFilterState()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("SetFilterState")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSetFilterState(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("SetFilterState")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + switch m.RateLimitEarlyConfigType.(type) { case *VirtualHostOptions_RatelimitEarly: diff --git a/projects/gloo/pkg/api/v1/virtual_host_options.pb.uniquehash.go b/projects/gloo/pkg/api/v1/virtual_host_options.pb.uniquehash.go index 403589c6c8f..654f683aca4 100644 --- a/projects/gloo/pkg/api/v1/virtual_host_options.pb.uniquehash.go +++ b/projects/gloo/pkg/api/v1/virtual_host_options.pb.uniquehash.go @@ -403,6 +403,26 @@ func (m *VirtualHostOptions) HashUnique(hasher hash.Hash64) (uint64, error) { } } + if h, ok := interface{}(m.GetSetFilterState()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("SetFilterState")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSetFilterState(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("SetFilterState")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + switch m.RateLimitEarlyConfigType.(type) { case *VirtualHostOptions_RatelimitEarly: diff --git a/projects/gloo/pkg/plugins/registry/registry.go b/projects/gloo/pkg/plugins/registry/registry.go index 2632f167a79..433e488fdb7 100644 --- a/projects/gloo/pkg/plugins/registry/registry.go +++ b/projects/gloo/pkg/plugins/registry/registry.go @@ -45,6 +45,7 @@ import ( "github.com/solo-io/gloo/projects/gloo/pkg/plugins/proxyprotocol" "github.com/solo-io/gloo/projects/gloo/pkg/plugins/ratelimit" "github.com/solo-io/gloo/projects/gloo/pkg/plugins/rest" + "github.com/solo-io/gloo/projects/gloo/pkg/plugins/set_filter_state" "github.com/solo-io/gloo/projects/gloo/pkg/plugins/shadowing" "github.com/solo-io/gloo/projects/gloo/pkg/plugins/static" "github.com/solo-io/gloo/projects/gloo/pkg/plugins/stats" @@ -125,6 +126,7 @@ func Plugins(opts PluginOpts) []plugins.Plugin { cors.NewPlugin(), linkerd.NewPlugin(), stats.NewPlugin(), + set_filter_state.NewPlugin(), ) if ec2Plugin != nil { glooPlugins = append(glooPlugins, ec2Plugin) diff --git a/projects/gloo/pkg/plugins/set_filter_state/plugin.go b/projects/gloo/pkg/plugins/set_filter_state/plugin.go new file mode 100644 index 00000000000..8b18d160468 --- /dev/null +++ b/projects/gloo/pkg/plugins/set_filter_state/plugin.go @@ -0,0 +1,165 @@ +package set_filter_state + +import ( + + //envoy_config_listener_v3 "github.com/envoyproxy/go-control-plane/envoy/config/listener/v3" + + "fmt" + + corev3 "github.com/envoyproxy/go-control-plane/envoy/config/core/v3" + envoy_config_route_v3 "github.com/envoyproxy/go-control-plane/envoy/config/route/v3" + common_set_filter_state_v3 "github.com/envoyproxy/go-control-plane/envoy/extensions/filters/common/set_filter_state/v3" + http_set_filter_state_v3 "github.com/envoyproxy/go-control-plane/envoy/extensions/filters/http/set_filter_state/v3" + v1 "github.com/solo-io/gloo/projects/gloo/pkg/api/v1" + "github.com/solo-io/gloo/projects/gloo/pkg/plugins" + "github.com/solo-io/gloo/projects/gloo/pkg/plugins/pluginutils" +) + +var ( + _ plugins.Plugin = new(plugin) + _ plugins.RoutePlugin = new(plugin) + //_ plugins.HttpFilterPlugin = new(plugin) + _ plugins.VirtualHostPlugin = new(plugin) +) + +var ( + pluginStage = plugins.BeforeStage(plugins.RateLimitStage) // put after transformation stage +) + +const ( + ExtensionName = "set_filter_state" + FilterName = "envoy.filters.http.set_filter_state" +) + +type plugin struct{} + +func (p *plugin) Name() string { + return ExtensionName +} + +func (p *plugin) Init(_ plugins.InitParams) {} + +func NewPlugin() *plugin { + fmt.Printf("--------------------------------\nSET STATE FILTER NEW PLUGIN \n--------------------------------\n") + return &plugin{} +} + +func (p *plugin) ProcessRoute(params plugins.RouteParams, in *v1.Route, out *envoy_config_route_v3.Route) error { + cfg := in.GetOptions().GetSetFilterState() + if cfg == nil { + fmt.Printf("--------------------------------\nSET STATE FILTER ProcessRoute (NULL) \n--------------------------------\n") + //return nil + } else { + fmt.Printf("--------------------------------\nSET STATE FILTER ProcessRoute %+v \n--------------------------------\n", cfg) + } + + // filterCfg := &http_set_filter_state_v3.Config{} + + // // for _, onRequestHeader := range cfg.GetOnRequestHeaders() { + // // filterCfg.OnRequestHeaders = append(filterCfg.OnRequestHeaders, toEnvoyFilterStateValue(onRequestHeader)) + // // } + + // fmt.Printf("--------------------------------\nSET STATE FILTER ProcessRoute \n--------------------------------\n") + // filterCfg.OnRequestHeaders = append(filterCfg.OnRequestHeaders, toEnvoyFilterStateValue(&set_filter_state.FilterStateValue{})) + + // //return pluginutils.SetRoutePerFilterConfig(out, FilterName, filterCfg) + // marshaled, err := utils.MessageToAny(filterCfg) + // if err != nil { + // return err + // } + // out.TypedPerFilterConfig[FilterName] = marshaled + pluginutils.SetRoutePerFilterConfig(out, FilterName, hardcodedFilterState("2")) + + return nil +} + +func (p *plugin) HttpFilters(params plugins.Params, listener *v1.HttpListener) ([]plugins.StagedHttpFilter, error) { + var filters []plugins.StagedHttpFilter + + fmt.Printf("--------------------------------\nSET STATE FILTER HttpFilters\n--------------------------------\n") + cfg := listener.GetOptions().GetSetFilterState() + if cfg == nil { + fmt.Printf("--------------------------------\nSET STATE FILTER HttpFilters (NULL) \n--------------------------------\n") + //return filters, nil + } else { + fmt.Printf("--------------------------------\nSET STATE FILTER HttpFilters %+v \n--------------------------------\n", cfg) + } + + // fsv := toEnvoyFilterStateValue(&set_filter_state.FilterStateValue{}) + + // filters = append(filters, + // plugins.MustNewStagedFilter(FilterName, + // &envoytransformation.FilterTransformations{ + // LogRequestResponseInfo: p.logRequestResponseInfo, + // }, + // pluginStage), + // ) + + filters = append(filters, hardcodedFilter("1")) + return filters, nil + +} + +func (p *plugin) ProcessVirtualHost( + params plugins.VirtualHostParams, + in *v1.VirtualHost, + out *envoy_config_route_v3.VirtualHost, +) error { + cfg := in.GetOptions().GetSetFilterState() + if cfg == nil { + fmt.Printf("--------------------------------\nSET STATE FILTER ProcessVirtualHost (NULL) \n--------------------------------\n") + return nil + } else { + fmt.Printf("--------------------------------\nSET STATE FILTER ProcessVirtualHost %+v \n--------------------------------\n", cfg) + } + + return pluginutils.SetVhostPerFilterConfig(out, FilterName, hardcodedFilterState("4")) +} + +const testKey = "envoy.ratelimit.hits_addend" + +func hardcodedFilterState(num string) *http_set_filter_state_v3.Config { + return &http_set_filter_state_v3.Config{ + OnRequestHeaders: []*common_set_filter_state_v3.FilterStateValue{ + { + Key: &common_set_filter_state_v3.FilterStateValue_ObjectKey{ + ObjectKey: testKey, + }, + Value: &common_set_filter_state_v3.FilterStateValue_FormatString{ + FormatString: &corev3.SubstitutionFormatString{ + Format: &corev3.SubstitutionFormatString_TextFormat{ + TextFormat: num, + }, + }, + }, + }, + }, + } +} + +func hardcodedFilter(num string) plugins.StagedHttpFilter { + return plugins.MustNewStagedFilter( + FilterName, + hardcodedFilterState(num), + pluginStage, + ) +} + +// func toEnvoyFilterStateValue(_ *set_filter_state.FilterStateValue) *common_set_filter_state_v3.FilterStateValue { +// return &common_set_filter_state_v3.FilterStateValue{ +// Key: &common_set_filter_state_v3.FilterStateValue_ObjectKey{ +// ObjectKey: testKey, +// }, +// Value: &common_set_filter_state_v3.FilterStateValue_FormatString{ +// FormatString: &corev3.SubstitutionFormatString{ +// Format: &corev3.SubstitutionFormatString_TextFormat{ +// TextFormat: "3", +// }, +// }, +// }, +// //FactoryKey: in.GetFactoryKey(), +// //ReadOnly: in.GetReadOnly(), +// //SharedWithUpstream: in.GetSharedWithUpstream(), +// SkipIfEmpty: true, +// } +// } diff --git a/projects/gloo/pkg/translator/route_config.go b/projects/gloo/pkg/translator/route_config.go index 94ed3158348..56106e86f9b 100644 --- a/projects/gloo/pkg/translator/route_config.go +++ b/projects/gloo/pkg/translator/route_config.go @@ -375,7 +375,10 @@ func (h *httpRouteConfigurationTranslator) runRoutePlugins( in *v1.Route, out *envoy_config_route_v3.Route) { // run the plugins for RoutePlugin + + fmt.Printf("Process route plugins, out: %+v\n", out) for _, plugin := range h.pluginRegistry.GetRoutePlugins() { + fmt.Printf("ProcessRoute plugin: %s\n", plugin.Name()) if err := plugin.ProcessRoute(params, in, out); err != nil { reportRoutePluginProcessingError( params, @@ -386,6 +389,7 @@ func (h *httpRouteConfigurationTranslator) runRoutePlugins( err) } } + fmt.Printf("Done Process route plugins, out: %+v\n", out) } func (h *httpRouteConfigurationTranslator) runRouteActionPlugins( diff --git a/test/e2e/access_log_test.go b/test/e2e/access_log_test.go index b62139d5bbf..dbde08889df 100644 --- a/test/e2e/access_log_test.go +++ b/test/e2e/access_log_test.go @@ -6,7 +6,6 @@ import ( "net/http" "time" - "github.com/solo-io/gloo/test/helpers" "github.com/solo-io/gloo/test/testutils" "github.com/solo-io/gloo/test/gomega/matchers" @@ -28,7 +27,6 @@ import ( gloov1 "github.com/solo-io/gloo/projects/gloo/pkg/api/v1" "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/als" - "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/dynamic_forward_proxy" alsplugin "github.com/solo-io/gloo/projects/gloo/pkg/plugins/als" "github.com/solo-io/gloo/projects/gloo/pkg/translator" ) @@ -137,20 +135,6 @@ var _ = Describe("Access Log", func() { StaticClusterName: alsplugin.ClusterName, }, FilterStateObjectsToLog: []string{ - "envoy.network.upstream_server_name", - "envoy.network.application_protocols", - "envoy.network.upstream_subject_alt_names", - "envoy.tcp_proxy.cluster", - "envoy.udp_proxy.cluster", - "envoy.network.transport_socket.original_dst_address", - "envoy.filters.listener.original_dst.local_ip", - "envoy.filters.listener.original_dst.remote_ip", - "envoy.upstream.dynamic_host", - "envoy.upstream.dynamic_port", - "envoy.tcp_proxy.disable_tunneling", - "envoy.filters.network.http_connection_manager.local_reply_owner", - "envoy.string", - "envoy.tcp_proxy.per_connection_idle_timeout_ms", "envoy.ratelimit.hits_addend", }, }, @@ -160,56 +144,44 @@ var _ = Describe("Access Log", func() { }, } - // enable dynamic forward proxy to save upstream address in filter state - gw.GetHttpGateway().Options = &gloov1.HttpListenerOptions{ - DynamicForwardProxy: &dynamic_forward_proxy.FilterConfig{ - SaveUpstreamAddress: true, - }, // pick up system defaults to resolve DNS - } - testContext.ResourcesToCreate().Gateways = v1.GatewayList{ gw, } - vs := helpers.NewVirtualServiceBuilder(). - WithName(e2e.DefaultVirtualServiceName). - WithNamespace(writeNamespace). - WithDomain(e2e.DefaultHost). - WithRoutePrefixMatcher(e2e.DefaultRouteName, "/"). - WithRouteAction(e2e.DefaultRouteName, &gloov1.RouteAction{ - Destination: &gloov1.RouteAction_DynamicForwardProxy{ - DynamicForwardProxy: &dynamic_forward_proxy.PerRouteConfig{ - HostRewriteSpecifier: &dynamic_forward_proxy.PerRouteConfig_AutoHostRewriteHeader{ - AutoHostRewriteHeader: "x-rewrite-me", - }, - }, - }, - }). - Build() - - testContext.ResourcesToCreate().VirtualServices = v1.VirtualServiceList{ - vs, - } + // vs := helpers.NewVirtualServiceBuilder(). + // WithName(e2e.DefaultVirtualServiceName). + // WithNamespace(writeNamespace). + // WithDomain(e2e.DefaultHost). + // WithRoutePrefixMatcher(e2e.DefaultRouteName, "/"). + // WithRouteAction(e2e.DefaultRouteName, &gloov1.RouteAction{ + // Destination: &gloov1.RouteAction_DynamicForwardProxy{ + // DynamicForwardProxy: &dynamic_forward_proxy.PerRouteConfig{ + // HostRewriteSpecifier: &dynamic_forward_proxy.PerRouteConfig_AutoHostRewriteHeader{ + // AutoHostRewriteHeader: "x-rewrite-me", + // }, + // }, + // }, + // }). + // Build() + + // testContext.ResourcesToCreate().VirtualServices = v1.VirtualServiceList{ + // vs, + // } }) It("can stream access logs with filter state objects", func() { - requestBuilder := testContext.GetHttpRequestBuilder(). - WithPath("get"). - WithHeader("x-rewrite-me", "postman-echo.com") + requestBuilder := testContext.GetHttpRequestBuilder() Eventually(func(g Gomega) { - g.Expect(testutils.DefaultHttpClient.Do(requestBuilder.Build())).Should(matchers.HaveHttpResponse(&matchers.HttpResponse{ - StatusCode: http.StatusOK, - Body: ContainSubstring(`"host": "postman-echo.com"`), - })) + g.Expect(testutils.DefaultHttpClient.Do(requestBuilder.Build())).Should(matchers.HaveOkResponse()) var entry *envoy_data_accesslog_v3.HTTPAccessLogEntry g.Eventually(msgChan, 2*time.Second).Should(Receive(&entry)) + g.Expect(entry.CommonProperties.UpstreamCluster).To(Equal(translator.UpstreamToClusterName(testContext.TestUpstream().Upstream.Metadata.Ref()))) fmt.Printf("entry.CommonProperties.UpstreamCluster: %s\n", entry.CommonProperties.UpstreamCluster) fmt.Printf("entry.CommonProperties.FilterStateObjects: %+v\n", entry.CommonProperties.FilterStateObjects) - g.Expect(entry.CommonProperties.UpstreamCluster).To(Equal("solo_io_generated_dfp:13273938298451159843")) - g.Expect(entry.CommonProperties.FilterStateObjects).To(ContainSubstring(`"upstream_remote_address":"10.244.0.1:80"`)) + g.Expect(entry.CommonProperties.FilterStateObjects).To(HaveKey("envoy.ratelimit.hits_addend")) }, time.Second*21, time.Second*2).Should(Succeed()) }) From b5d10996755feda7074bb5670d34d0f84a28121e Mon Sep 17 00:00:00 2001 From: sheidkamp Date: Fri, 7 Mar 2025 10:49:57 -0500 Subject: [PATCH 3/7] before generate --- ...proto => substitution_format_string.proto} | 0 .../set_filter_state/set_filter_state.proto | 12 +++++------ .../pkg/plugins/set_filter_state/plugin.go | 6 +++--- test/e2e/access_log_test.go | 20 +++++++++++++++++++ 4 files changed, 29 insertions(+), 9 deletions(-) rename projects/gloo/api/external/envoy/config/core/v3/{substitution_format_string.xproto => substitution_format_string.proto} (100%) diff --git a/projects/gloo/api/external/envoy/config/core/v3/substitution_format_string.xproto b/projects/gloo/api/external/envoy/config/core/v3/substitution_format_string.proto similarity index 100% rename from projects/gloo/api/external/envoy/config/core/v3/substitution_format_string.xproto rename to projects/gloo/api/external/envoy/config/core/v3/substitution_format_string.proto diff --git a/projects/gloo/api/v1/options/set_filter_state/set_filter_state.proto b/projects/gloo/api/v1/options/set_filter_state/set_filter_state.proto index 04361b23168..ae580b1c10e 100644 --- a/projects/gloo/api/v1/options/set_filter_state/set_filter_state.proto +++ b/projects/gloo/api/v1/options/set_filter_state/set_filter_state.proto @@ -39,13 +39,13 @@ message FilterStateValue { // for a list of valid factory keys. string factory_key = 6; - // oneof value { - // option (validate.required) = true; + oneof value { + option (validate.required) = true; - // // Uses the :ref:`format string ` to - // // instantiate the filter state object value. - // .solo.io.envoy.config.core.v3.SubstitutionFormatString format_string = 2; - // } + // Uses the :ref:`format string ` to + // instantiate the filter state object value. + .solo.io.envoy.config.core.v3.SubstitutionFormatString format_string = 2; + } // If marked as read-only, the filter state key value is locked, and cannot // be overridden by any filter, including this filter. diff --git a/projects/gloo/pkg/plugins/set_filter_state/plugin.go b/projects/gloo/pkg/plugins/set_filter_state/plugin.go index 8b18d160468..469bcfcad7b 100644 --- a/projects/gloo/pkg/plugins/set_filter_state/plugin.go +++ b/projects/gloo/pkg/plugins/set_filter_state/plugin.go @@ -48,7 +48,7 @@ func (p *plugin) ProcessRoute(params plugins.RouteParams, in *v1.Route, out *env cfg := in.GetOptions().GetSetFilterState() if cfg == nil { fmt.Printf("--------------------------------\nSET STATE FILTER ProcessRoute (NULL) \n--------------------------------\n") - //return nil + return nil } else { fmt.Printf("--------------------------------\nSET STATE FILTER ProcessRoute %+v \n--------------------------------\n", cfg) } @@ -80,9 +80,9 @@ func (p *plugin) HttpFilters(params plugins.Params, listener *v1.HttpListener) ( cfg := listener.GetOptions().GetSetFilterState() if cfg == nil { fmt.Printf("--------------------------------\nSET STATE FILTER HttpFilters (NULL) \n--------------------------------\n") - //return filters, nil + return filters, nil } else { - fmt.Printf("--------------------------------\nSET STATE FILTER HttpFilters %+v \n--------------------------------\n", cfg) + fmt.Printf("--------------------------------\nSET STATE FILTER HttpFilters (NOT NULL) %+v \n--------------------------------\n", cfg) } // fsv := toEnvoyFilterStateValue(&set_filter_state.FilterStateValue{}) diff --git a/test/e2e/access_log_test.go b/test/e2e/access_log_test.go index dbde08889df..0c16f6502ee 100644 --- a/test/e2e/access_log_test.go +++ b/test/e2e/access_log_test.go @@ -27,6 +27,7 @@ import ( gloov1 "github.com/solo-io/gloo/projects/gloo/pkg/api/v1" "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/als" + "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/set_filter_state" alsplugin "github.com/solo-io/gloo/projects/gloo/pkg/plugins/als" "github.com/solo-io/gloo/projects/gloo/pkg/translator" ) @@ -144,6 +145,25 @@ var _ = Describe("Access Log", func() { }, } + setFilterState := &set_filter_state.SetFilterState{ + OnRequestHeaders: []*set_filter_state.FilterStateValue{ + { + Key: &set_filter_state.FilterStateValue_ObjectKey{ + ObjectKey: "envoy.ratelimit.hits_addend", + }, + //Value: "1", + }, + }, + } + + if opts := gw.GetHttpGateway().GetOptions(); opts == nil { + gw.GetHttpGateway().Options = &gloov1.HttpListenerOptions{ + SetFilterState: setFilterState, + } + } else { + opts.SetFilterState = setFilterState + } + testContext.ResourcesToCreate().Gateways = v1.GatewayList{ gw, } From 54128ceeffdb8d762e2930afb379b784edb72bce Mon Sep 17 00:00:00 2001 From: sheidkamp Date: Fri, 7 Mar 2025 11:19:50 -0500 Subject: [PATCH 4/7] wire in SubstitutionFormatString --- .../set_filter_state.proto.sk.md | 2 + docs/data/ProtoMap.yaml | 6 + .../gloo/crds/gateway.solo.io_v1_Gateway.yaml | 70 ++++ ...gateway.solo.io_v1_HttpListenerOption.yaml | 35 ++ ...teway.solo.io_v1_MatchableHttpGateway.yaml | 35 ++ .../crds/gateway.solo.io_v1_RouteOption.yaml | 35 ++ .../crds/gateway.solo.io_v1_RouteTable.yaml | 35 ++ .../gateway.solo.io_v1_VirtualHostOption.yaml | 35 ++ .../gateway.solo.io_v1_VirtualService.yaml | 70 ++++ .../core/v3/substitution_format_string.proto | 7 +- .../set_filter_state/set_filter_state.proto | 1 + .../core/v3/substitution_format_string.pb.go | 384 ++++++++++++++++++ .../set_filter_state/set_filter_state.pb.go | 131 ++++-- 13 files changed, 803 insertions(+), 43 deletions(-) create mode 100644 projects/gloo/pkg/api/external/envoy/config/core/v3/substitution_format_string.pb.go diff --git a/docs/content/reference/api/github.com/solo-io/gloo/projects/gloo/api/v1/options/set_filter_state/set_filter_state.proto.sk.md b/docs/content/reference/api/github.com/solo-io/gloo/projects/gloo/api/v1/options/set_filter_state/set_filter_state.proto.sk.md index d058ef7b25f..66845f22ab4 100644 --- a/docs/content/reference/api/github.com/solo-io/gloo/projects/gloo/api/v1/options/set_filter_state/set_filter_state.proto.sk.md +++ b/docs/content/reference/api/github.com/solo-io/gloo/projects/gloo/api/v1/options/set_filter_state/set_filter_state.proto.sk.md @@ -51,6 +51,7 @@ A filter state key and value pair. ```yaml "objectKey": string "factoryKey": string +"formatString": .solo.io.envoy.config.core.v3.SubstitutionFormatString "readOnly": bool "sharedWithUpstream": .set_filter_state.options.gloo.solo.io.FilterStateValue.SharedWithUpstream "skipIfEmpty": bool @@ -61,6 +62,7 @@ A filter state key and value pair. | ----- | ---- | ----------- | | `objectKey` | `string` | Filter state object key. The key is used to lookup the object factory, unless :ref:`factory_key ` is set. See :ref:`the well-known filter state keys ` for a list of valid object keys. | | `factoryKey` | `string` | Optional filter object factory lookup key. See :ref:`the well-known filter state keys ` for a list of valid factory keys. | +| `formatString` | .solo.io.envoy.config.core.v3.SubstitutionFormatString | Uses the :ref:`format string ` to instantiate the filter state object value. | | `readOnly` | `bool` | If marked as read-only, the filter state key value is locked, and cannot be overridden by any filter, including this filter. | | `sharedWithUpstream` | [.set_filter_state.options.gloo.solo.io.FilterStateValue.SharedWithUpstream](../set_filter_state.proto.sk/#sharedwithupstream) | Configures the object to be shared with the upstream internal connections. See :ref:`internal upstream transport ` for more details on the filter state sharing with the internal connections. | | `skipIfEmpty` | `bool` | Skip the update if the value evaluates to an empty string. This option can be used to supply multiple alternatives for the same filter state object key. | diff --git a/docs/data/ProtoMap.yaml b/docs/data/ProtoMap.yaml index 5b6a64211d4..1ee61332a89 100644 --- a/docs/data/ProtoMap.yaml +++ b/docs/data/ProtoMap.yaml @@ -1712,6 +1712,9 @@ apis: solo.io.envoy.config.core.v3.HttpUri: relativepath: reference/api/github.com/solo-io/gloo/projects/gloo/api/external/envoy/config/core/v3/http_uri.proto.sk/#HttpUri package: solo.io.envoy.config.core.v3 + solo.io.envoy.config.core.v3.JsonFormatOptions: + relativepath: reference/api/github.com/solo-io/gloo/projects/gloo/api/external/envoy/config/core/v3/substitution_format_string.proto.sk/#JsonFormatOptions + package: solo.io.envoy.config.core.v3 solo.io.envoy.config.core.v3.Locality: relativepath: reference/api/github.com/solo-io/gloo/projects/gloo/api/external/envoy/config/core/v3/base.proto.sk/#Locality package: solo.io.envoy.config.core.v3 @@ -1754,6 +1757,9 @@ apis: solo.io.envoy.config.core.v3.SocketOption: relativepath: reference/api/github.com/solo-io/gloo/projects/gloo/api/external/envoy/config/core/v3/socket_option.proto.sk/#SocketOption package: solo.io.envoy.config.core.v3 + solo.io.envoy.config.core.v3.SubstitutionFormatString: + relativepath: reference/api/github.com/solo-io/gloo/projects/gloo/api/external/envoy/config/core/v3/substitution_format_string.proto.sk/#SubstitutionFormatString + package: solo.io.envoy.config.core.v3 solo.io.envoy.config.core.v3.TcpKeepalive: relativepath: reference/api/github.com/solo-io/gloo/projects/gloo/api/external/envoy/config/core/v3/address.proto.sk/#TcpKeepalive package: solo.io.envoy.config.core.v3 diff --git a/install/helm/gloo/crds/gateway.solo.io_v1_Gateway.yaml b/install/helm/gloo/crds/gateway.solo.io_v1_Gateway.yaml index 868d10b3ec0..b1d3db39e46 100644 --- a/install/helm/gloo/crds/gateway.solo.io_v1_Gateway.yaml +++ b/install/helm/gloo/crds/gateway.solo.io_v1_Gateway.yaml @@ -1352,6 +1352,41 @@ spec: properties: factoryKey: type: string + formatString: + properties: + contentType: + type: string + formatters: + items: + properties: + name: + type: string + typedConfig: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + type: array + jsonFormat: + type: object + x-kubernetes-preserve-unknown-fields: true + jsonFormatOptions: + properties: + sortProperties: + type: boolean + type: object + omitEmptyValues: + type: boolean + textFormatSource: + properties: + filename: + type: string + inlineBytes: + format: byte + type: string + inlineString: + type: string + type: object + type: object objectKey: type: string readOnly: @@ -3453,6 +3488,41 @@ spec: properties: factoryKey: type: string + formatString: + properties: + contentType: + type: string + formatters: + items: + properties: + name: + type: string + typedConfig: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + type: array + jsonFormat: + type: object + x-kubernetes-preserve-unknown-fields: true + jsonFormatOptions: + properties: + sortProperties: + type: boolean + type: object + omitEmptyValues: + type: boolean + textFormatSource: + properties: + filename: + type: string + inlineBytes: + format: byte + type: string + inlineString: + type: string + type: object + type: object objectKey: type: string readOnly: diff --git a/install/helm/gloo/crds/gateway.solo.io_v1_HttpListenerOption.yaml b/install/helm/gloo/crds/gateway.solo.io_v1_HttpListenerOption.yaml index fec47d9ef73..cae5f9a694b 100644 --- a/install/helm/gloo/crds/gateway.solo.io_v1_HttpListenerOption.yaml +++ b/install/helm/gloo/crds/gateway.solo.io_v1_HttpListenerOption.yaml @@ -1343,6 +1343,41 @@ spec: properties: factoryKey: type: string + formatString: + properties: + contentType: + type: string + formatters: + items: + properties: + name: + type: string + typedConfig: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + type: array + jsonFormat: + type: object + x-kubernetes-preserve-unknown-fields: true + jsonFormatOptions: + properties: + sortProperties: + type: boolean + type: object + omitEmptyValues: + type: boolean + textFormatSource: + properties: + filename: + type: string + inlineBytes: + format: byte + type: string + inlineString: + type: string + type: object + type: object objectKey: type: string readOnly: diff --git a/install/helm/gloo/crds/gateway.solo.io_v1_MatchableHttpGateway.yaml b/install/helm/gloo/crds/gateway.solo.io_v1_MatchableHttpGateway.yaml index d2d9e6a22fa..7e80863528e 100644 --- a/install/helm/gloo/crds/gateway.solo.io_v1_MatchableHttpGateway.yaml +++ b/install/helm/gloo/crds/gateway.solo.io_v1_MatchableHttpGateway.yaml @@ -1346,6 +1346,41 @@ spec: properties: factoryKey: type: string + formatString: + properties: + contentType: + type: string + formatters: + items: + properties: + name: + type: string + typedConfig: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + type: array + jsonFormat: + type: object + x-kubernetes-preserve-unknown-fields: true + jsonFormatOptions: + properties: + sortProperties: + type: boolean + type: object + omitEmptyValues: + type: boolean + textFormatSource: + properties: + filename: + type: string + inlineBytes: + format: byte + type: string + inlineString: + type: string + type: object + type: object objectKey: type: string readOnly: diff --git a/install/helm/gloo/crds/gateway.solo.io_v1_RouteOption.yaml b/install/helm/gloo/crds/gateway.solo.io_v1_RouteOption.yaml index 703231f20eb..e4d96ee123d 100644 --- a/install/helm/gloo/crds/gateway.solo.io_v1_RouteOption.yaml +++ b/install/helm/gloo/crds/gateway.solo.io_v1_RouteOption.yaml @@ -1705,6 +1705,41 @@ spec: properties: factoryKey: type: string + formatString: + properties: + contentType: + type: string + formatters: + items: + properties: + name: + type: string + typedConfig: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + type: array + jsonFormat: + type: object + x-kubernetes-preserve-unknown-fields: true + jsonFormatOptions: + properties: + sortProperties: + type: boolean + type: object + omitEmptyValues: + type: boolean + textFormatSource: + properties: + filename: + type: string + inlineBytes: + format: byte + type: string + inlineString: + type: string + type: object + type: object objectKey: type: string readOnly: diff --git a/install/helm/gloo/crds/gateway.solo.io_v1_RouteTable.yaml b/install/helm/gloo/crds/gateway.solo.io_v1_RouteTable.yaml index 677d808012f..c7cde63de9b 100644 --- a/install/helm/gloo/crds/gateway.solo.io_v1_RouteTable.yaml +++ b/install/helm/gloo/crds/gateway.solo.io_v1_RouteTable.yaml @@ -1815,6 +1815,41 @@ spec: properties: factoryKey: type: string + formatString: + properties: + contentType: + type: string + formatters: + items: + properties: + name: + type: string + typedConfig: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + type: array + jsonFormat: + type: object + x-kubernetes-preserve-unknown-fields: true + jsonFormatOptions: + properties: + sortProperties: + type: boolean + type: object + omitEmptyValues: + type: boolean + textFormatSource: + properties: + filename: + type: string + inlineBytes: + format: byte + type: string + inlineString: + type: string + type: object + type: object objectKey: type: string readOnly: diff --git a/install/helm/gloo/crds/gateway.solo.io_v1_VirtualHostOption.yaml b/install/helm/gloo/crds/gateway.solo.io_v1_VirtualHostOption.yaml index 9f3b3f65230..40318600256 100644 --- a/install/helm/gloo/crds/gateway.solo.io_v1_VirtualHostOption.yaml +++ b/install/helm/gloo/crds/gateway.solo.io_v1_VirtualHostOption.yaml @@ -1373,6 +1373,41 @@ spec: properties: factoryKey: type: string + formatString: + properties: + contentType: + type: string + formatters: + items: + properties: + name: + type: string + typedConfig: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + type: array + jsonFormat: + type: object + x-kubernetes-preserve-unknown-fields: true + jsonFormatOptions: + properties: + sortProperties: + type: boolean + type: object + omitEmptyValues: + type: boolean + textFormatSource: + properties: + filename: + type: string + inlineBytes: + format: byte + type: string + inlineString: + type: string + type: object + type: object objectKey: type: string readOnly: diff --git a/install/helm/gloo/crds/gateway.solo.io_v1_VirtualService.yaml b/install/helm/gloo/crds/gateway.solo.io_v1_VirtualService.yaml index 8fa9a8d7fc4..07dd12692f9 100644 --- a/install/helm/gloo/crds/gateway.solo.io_v1_VirtualService.yaml +++ b/install/helm/gloo/crds/gateway.solo.io_v1_VirtualService.yaml @@ -1463,6 +1463,41 @@ spec: properties: factoryKey: type: string + formatString: + properties: + contentType: + type: string + formatters: + items: + properties: + name: + type: string + typedConfig: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + type: array + jsonFormat: + type: object + x-kubernetes-preserve-unknown-fields: true + jsonFormatOptions: + properties: + sortProperties: + type: boolean + type: object + omitEmptyValues: + type: boolean + textFormatSource: + properties: + filename: + type: string + inlineBytes: + format: byte + type: string + inlineString: + type: string + type: object + type: object objectKey: type: string readOnly: @@ -4947,6 +4982,41 @@ spec: properties: factoryKey: type: string + formatString: + properties: + contentType: + type: string + formatters: + items: + properties: + name: + type: string + typedConfig: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + type: array + jsonFormat: + type: object + x-kubernetes-preserve-unknown-fields: true + jsonFormatOptions: + properties: + sortProperties: + type: boolean + type: object + omitEmptyValues: + type: boolean + textFormatSource: + properties: + filename: + type: string + inlineBytes: + format: byte + type: string + inlineString: + type: string + type: object + type: object objectKey: type: string readOnly: diff --git a/projects/gloo/api/external/envoy/config/core/v3/substitution_format_string.proto b/projects/gloo/api/external/envoy/config/core/v3/substitution_format_string.proto index 08e13da066e..f2aef08d05d 100644 --- a/projects/gloo/api/external/envoy/config/core/v3/substitution_format_string.proto +++ b/projects/gloo/api/external/envoy/config/core/v3/substitution_format_string.proto @@ -14,7 +14,7 @@ option java_package = "io.envoyproxy.solo.io.envoy.config.core.v3"; option java_outer_classname = "SubstitutionFormatStringProto"; option java_multiple_files = true; -option (solo.io.udpa.annotations.file_status).package_version_status = ACTIVE; +//option (solo.io.udpa.annotations.file_status).package_version_status = ACTIVE; // [#protodoc-title: Substitution format string] // Optional configuration options to be used with json_format. @@ -27,6 +27,7 @@ message JsonFormatOptions { // to generate a new string in either plain text or JSON format. // [#next-free-field: 8] message SubstitutionFormatString { + oneof format { option (validate.required) = true; @@ -100,4 +101,6 @@ message SubstitutionFormatString { // If json_format is used, the options will be applied to the output JSON string. JsonFormatOptions json_format_options = 7; -} \ No newline at end of file +} + +option go_package = "github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3"; \ No newline at end of file diff --git a/projects/gloo/api/v1/options/set_filter_state/set_filter_state.proto b/projects/gloo/api/v1/options/set_filter_state/set_filter_state.proto index ae580b1c10e..395d9cc86ab 100644 --- a/projects/gloo/api/v1/options/set_filter_state/set_filter_state.proto +++ b/projects/gloo/api/v1/options/set_filter_state/set_filter_state.proto @@ -5,6 +5,7 @@ package set_filter_state.options.gloo.solo.io; option go_package = "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/set_filter_state"; import "extproto/ext.proto"; import "validate/validate.proto"; +import "github.com/solo-io/gloo/projects/gloo/api/external/envoy/config/core/v3/substitution_format_string.proto"; // Configuration for the Set-Filter-State HTTP Filter message SetFilterState { diff --git a/projects/gloo/pkg/api/external/envoy/config/core/v3/substitution_format_string.pb.go b/projects/gloo/pkg/api/external/envoy/config/core/v3/substitution_format_string.pb.go new file mode 100644 index 00000000000..cadcd34d7bd --- /dev/null +++ b/projects/gloo/pkg/api/external/envoy/config/core/v3/substitution_format_string.pb.go @@ -0,0 +1,384 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.5 +// protoc v3.6.1 +// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/config/core/v3/substitution_format_string.proto + +package v3 + +import ( + reflect "reflect" + sync "sync" + unsafe "unsafe" + + _ "github.com/envoyproxy/protoc-gen-validate/validate" + _ "github.com/solo-io/gloo/projects/gloo/pkg/api/external/udpa/annotations" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + structpb "google.golang.org/protobuf/types/known/structpb" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Optional configuration options to be used with json_format. +type JsonFormatOptions struct { + state protoimpl.MessageState `protogen:"open.v1"` + // The output JSON string properties will be sorted. + SortProperties bool `protobuf:"varint,1,opt,name=sort_properties,json=sortProperties,proto3" json:"sort_properties,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *JsonFormatOptions) Reset() { + *x = JsonFormatOptions{} + mi := &file_github_com_solo_io_gloo_projects_gloo_api_external_envoy_config_core_v3_substitution_format_string_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *JsonFormatOptions) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*JsonFormatOptions) ProtoMessage() {} + +func (x *JsonFormatOptions) ProtoReflect() protoreflect.Message { + mi := &file_github_com_solo_io_gloo_projects_gloo_api_external_envoy_config_core_v3_substitution_format_string_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use JsonFormatOptions.ProtoReflect.Descriptor instead. +func (*JsonFormatOptions) Descriptor() ([]byte, []int) { + return file_github_com_solo_io_gloo_projects_gloo_api_external_envoy_config_core_v3_substitution_format_string_proto_rawDescGZIP(), []int{0} +} + +func (x *JsonFormatOptions) GetSortProperties() bool { + if x != nil { + return x.SortProperties + } + return false +} + +// Configuration to use multiple :ref:`command operators ` +// to generate a new string in either plain text or JSON format. +// [#next-free-field: 8] +type SubstitutionFormatString struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Format: + // + // *SubstitutionFormatString_JsonFormat + // *SubstitutionFormatString_TextFormatSource + Format isSubstitutionFormatString_Format `protobuf_oneof:"format"` + // If set to true, when command operators are evaluated to null, + // + // - for “text_format“, the output of the empty operator is changed from “-“ to an + // empty string, so that empty values are omitted entirely. + // - for “json_format“ the keys with null values are omitted in the output structure. + OmitEmptyValues bool `protobuf:"varint,3,opt,name=omit_empty_values,json=omitEmptyValues,proto3" json:"omit_empty_values,omitempty"` + // Specify a “content_type“ field. + // If this field is not set then “text/plain“ is used for “text_format“ and + // “application/json“ is used for “json_format“. + // + // .. validated-code-block:: yaml + // + // :type-name: envoy.config.core.v3.SubstitutionFormatString + // + // content_type: "text/html; charset=UTF-8" + ContentType string `protobuf:"bytes,4,opt,name=content_type,json=contentType,proto3" json:"content_type,omitempty"` + // Specifies a collection of Formatter plugins that can be called from the access log configuration. + // See the formatters extensions documentation for details. + // [#extension-category: envoy.formatter] + Formatters []*TypedExtensionConfig `protobuf:"bytes,6,rep,name=formatters,proto3" json:"formatters,omitempty"` + // If json_format is used, the options will be applied to the output JSON string. + JsonFormatOptions *JsonFormatOptions `protobuf:"bytes,7,opt,name=json_format_options,json=jsonFormatOptions,proto3" json:"json_format_options,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SubstitutionFormatString) Reset() { + *x = SubstitutionFormatString{} + mi := &file_github_com_solo_io_gloo_projects_gloo_api_external_envoy_config_core_v3_substitution_format_string_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SubstitutionFormatString) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SubstitutionFormatString) ProtoMessage() {} + +func (x *SubstitutionFormatString) ProtoReflect() protoreflect.Message { + mi := &file_github_com_solo_io_gloo_projects_gloo_api_external_envoy_config_core_v3_substitution_format_string_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SubstitutionFormatString.ProtoReflect.Descriptor instead. +func (*SubstitutionFormatString) Descriptor() ([]byte, []int) { + return file_github_com_solo_io_gloo_projects_gloo_api_external_envoy_config_core_v3_substitution_format_string_proto_rawDescGZIP(), []int{1} +} + +func (x *SubstitutionFormatString) GetFormat() isSubstitutionFormatString_Format { + if x != nil { + return x.Format + } + return nil +} + +func (x *SubstitutionFormatString) GetJsonFormat() *structpb.Struct { + if x != nil { + if x, ok := x.Format.(*SubstitutionFormatString_JsonFormat); ok { + return x.JsonFormat + } + } + return nil +} + +func (x *SubstitutionFormatString) GetTextFormatSource() *DataSource { + if x != nil { + if x, ok := x.Format.(*SubstitutionFormatString_TextFormatSource); ok { + return x.TextFormatSource + } + } + return nil +} + +func (x *SubstitutionFormatString) GetOmitEmptyValues() bool { + if x != nil { + return x.OmitEmptyValues + } + return false +} + +func (x *SubstitutionFormatString) GetContentType() string { + if x != nil { + return x.ContentType + } + return "" +} + +func (x *SubstitutionFormatString) GetFormatters() []*TypedExtensionConfig { + if x != nil { + return x.Formatters + } + return nil +} + +func (x *SubstitutionFormatString) GetJsonFormatOptions() *JsonFormatOptions { + if x != nil { + return x.JsonFormatOptions + } + return nil +} + +type isSubstitutionFormatString_Format interface { + isSubstitutionFormatString_Format() +} + +type SubstitutionFormatString_JsonFormat struct { + // Specify a format with command operators to form a JSON string. + // Its details is described in :ref:`format dictionary`. + // Values are rendered as strings, numbers, or boolean values as appropriate. + // Nested JSON objects may be produced by some command operators (e.g. FILTER_STATE or DYNAMIC_METADATA). + // See the documentation for a specific command operator for details. + // + // .. validated-code-block:: yaml + // + // :type-name: envoy.config.core.v3.SubstitutionFormatString + // + // json_format: + // status: "%RESPONSE_CODE%" + // message: "%LOCAL_REPLY_BODY%" + // + // The following JSON object would be created: + // + // .. code-block:: json + // + // { + // "status": 500, + // "message": "My error message" + // } + JsonFormat *structpb.Struct `protobuf:"bytes,2,opt,name=json_format,json=jsonFormat,proto3,oneof"` +} + +type SubstitutionFormatString_TextFormatSource struct { + // Specify a format with command operators to form a text string. + // Its details is described in :ref:`format string`. + // + // For example, setting “text_format“ like below, + // + // .. validated-code-block:: yaml + // + // :type-name: envoy.config.core.v3.SubstitutionFormatString + // + // text_format_source: + // inline_string: "%LOCAL_REPLY_BODY%:%RESPONSE_CODE%:path=%REQ(:path)%\n" + // + // generates plain text similar to: + // + // .. code-block:: text + // + // upstream connect error:503:path=/foo + TextFormatSource *DataSource `protobuf:"bytes,5,opt,name=text_format_source,json=textFormatSource,proto3,oneof"` +} + +func (*SubstitutionFormatString_JsonFormat) isSubstitutionFormatString_Format() {} + +func (*SubstitutionFormatString_TextFormatSource) isSubstitutionFormatString_Format() {} + +var File_github_com_solo_io_gloo_projects_gloo_api_external_envoy_config_core_v3_substitution_format_string_proto protoreflect.FileDescriptor + +var file_github_com_solo_io_gloo_projects_gloo_api_external_envoy_config_core_v3_substitution_format_string_proto_rawDesc = string([]byte{ + 0x0a, 0x68, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x6f, 0x6c, + 0x6f, 0x2d, 0x69, 0x6f, 0x2f, 0x67, 0x6c, 0x6f, 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x73, 0x2f, 0x67, 0x6c, 0x6f, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x65, 0x78, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x33, 0x2f, 0x73, 0x75, 0x62, 0x73, 0x74, 0x69, + 0x74, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x5f, 0x73, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1c, 0x73, 0x6f, 0x6c, 0x6f, + 0x2e, 0x69, 0x6f, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x33, 0x1a, 0x52, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x6f, 0x6c, 0x6f, 0x2d, 0x69, 0x6f, 0x2f, 0x67, 0x6c, 0x6f, + 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x67, 0x6c, 0x6f, 0x6f, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x65, 0x6e, 0x76, + 0x6f, 0x79, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, + 0x33, 0x2f, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x57, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x6f, 0x6c, 0x6f, 0x2d, 0x69, 0x6f, + 0x2f, 0x67, 0x6c, 0x6f, 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x67, + 0x6c, 0x6f, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2f, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x63, 0x6f, + 0x72, 0x65, 0x2f, 0x76, 0x33, 0x2f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x1d, 0x75, 0x64, 0x70, 0x61, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x17, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x3c, 0x0a, 0x11, 0x4a, + 0x73, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, + 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x73, 0x6f, 0x72, 0x74, 0x50, + 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x22, 0xda, 0x03, 0x0a, 0x18, 0x53, 0x75, + 0x62, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x44, 0x0a, 0x0b, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x66, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, + 0x72, 0x75, 0x63, 0x74, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x48, 0x00, + 0x52, 0x0a, 0x6a, 0x73, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x58, 0x0a, 0x12, + 0x74, 0x65, 0x78, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x5f, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, + 0x69, 0x6f, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x33, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x48, 0x00, 0x52, 0x10, 0x74, 0x65, 0x78, 0x74, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x6f, 0x6d, 0x69, 0x74, 0x5f, 0x65, + 0x6d, 0x70, 0x74, 0x79, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0f, 0x6f, 0x6d, 0x69, 0x74, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x73, 0x12, 0x2e, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xfa, 0x42, 0x08, 0x72, 0x06, 0xc8, + 0x01, 0x00, 0xc0, 0x01, 0x02, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x52, 0x0a, 0x0a, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x74, 0x65, 0x72, 0x73, + 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, + 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x76, 0x33, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, + 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0a, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x74, 0x65, 0x72, 0x73, 0x12, 0x5f, 0x0a, 0x13, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x66, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x65, 0x6e, + 0x76, 0x6f, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x76, 0x33, 0x2e, 0x4a, 0x73, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x4f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x11, 0x6a, 0x73, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x0d, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x12, 0x03, 0xf8, 0x42, 0x01, 0x42, 0x9a, 0x01, 0x0a, 0x2a, 0x69, 0x6f, 0x2e, 0x65, 0x6e, + 0x76, 0x6f, 0x79, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, + 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x76, 0x33, 0x42, 0x1d, 0x53, 0x75, 0x62, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, + 0x69, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x73, 0x6f, 0x6c, 0x6f, 0x2d, 0x69, 0x6f, 0x2f, 0x67, 0x6c, 0x6f, 0x6f, 0x2f, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x67, 0x6c, 0x6f, 0x6f, 0x2f, 0x70, 0x6b, + 0x67, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x65, + 0x6e, 0x76, 0x6f, 0x79, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x63, 0x6f, 0x72, 0x65, + 0x2f, 0x76, 0x33, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +}) + +var ( + file_github_com_solo_io_gloo_projects_gloo_api_external_envoy_config_core_v3_substitution_format_string_proto_rawDescOnce sync.Once + file_github_com_solo_io_gloo_projects_gloo_api_external_envoy_config_core_v3_substitution_format_string_proto_rawDescData []byte +) + +func file_github_com_solo_io_gloo_projects_gloo_api_external_envoy_config_core_v3_substitution_format_string_proto_rawDescGZIP() []byte { + file_github_com_solo_io_gloo_projects_gloo_api_external_envoy_config_core_v3_substitution_format_string_proto_rawDescOnce.Do(func() { + file_github_com_solo_io_gloo_projects_gloo_api_external_envoy_config_core_v3_substitution_format_string_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_github_com_solo_io_gloo_projects_gloo_api_external_envoy_config_core_v3_substitution_format_string_proto_rawDesc), len(file_github_com_solo_io_gloo_projects_gloo_api_external_envoy_config_core_v3_substitution_format_string_proto_rawDesc))) + }) + return file_github_com_solo_io_gloo_projects_gloo_api_external_envoy_config_core_v3_substitution_format_string_proto_rawDescData +} + +var file_github_com_solo_io_gloo_projects_gloo_api_external_envoy_config_core_v3_substitution_format_string_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_github_com_solo_io_gloo_projects_gloo_api_external_envoy_config_core_v3_substitution_format_string_proto_goTypes = []any{ + (*JsonFormatOptions)(nil), // 0: solo.io.envoy.config.core.v3.JsonFormatOptions + (*SubstitutionFormatString)(nil), // 1: solo.io.envoy.config.core.v3.SubstitutionFormatString + (*structpb.Struct)(nil), // 2: google.protobuf.Struct + (*DataSource)(nil), // 3: solo.io.envoy.config.core.v3.DataSource + (*TypedExtensionConfig)(nil), // 4: solo.io.envoy.config.core.v3.TypedExtensionConfig +} +var file_github_com_solo_io_gloo_projects_gloo_api_external_envoy_config_core_v3_substitution_format_string_proto_depIdxs = []int32{ + 2, // 0: solo.io.envoy.config.core.v3.SubstitutionFormatString.json_format:type_name -> google.protobuf.Struct + 3, // 1: solo.io.envoy.config.core.v3.SubstitutionFormatString.text_format_source:type_name -> solo.io.envoy.config.core.v3.DataSource + 4, // 2: solo.io.envoy.config.core.v3.SubstitutionFormatString.formatters:type_name -> solo.io.envoy.config.core.v3.TypedExtensionConfig + 0, // 3: solo.io.envoy.config.core.v3.SubstitutionFormatString.json_format_options:type_name -> solo.io.envoy.config.core.v3.JsonFormatOptions + 4, // [4:4] is the sub-list for method output_type + 4, // [4:4] is the sub-list for method input_type + 4, // [4:4] is the sub-list for extension type_name + 4, // [4:4] is the sub-list for extension extendee + 0, // [0:4] is the sub-list for field type_name +} + +func init() { + file_github_com_solo_io_gloo_projects_gloo_api_external_envoy_config_core_v3_substitution_format_string_proto_init() +} +func file_github_com_solo_io_gloo_projects_gloo_api_external_envoy_config_core_v3_substitution_format_string_proto_init() { + if File_github_com_solo_io_gloo_projects_gloo_api_external_envoy_config_core_v3_substitution_format_string_proto != nil { + return + } + file_github_com_solo_io_gloo_projects_gloo_api_external_envoy_config_core_v3_base_proto_init() + file_github_com_solo_io_gloo_projects_gloo_api_external_envoy_config_core_v3_extension_proto_init() + file_github_com_solo_io_gloo_projects_gloo_api_external_envoy_config_core_v3_substitution_format_string_proto_msgTypes[1].OneofWrappers = []any{ + (*SubstitutionFormatString_JsonFormat)(nil), + (*SubstitutionFormatString_TextFormatSource)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_github_com_solo_io_gloo_projects_gloo_api_external_envoy_config_core_v3_substitution_format_string_proto_rawDesc), len(file_github_com_solo_io_gloo_projects_gloo_api_external_envoy_config_core_v3_substitution_format_string_proto_rawDesc)), + NumEnums: 0, + NumMessages: 2, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_github_com_solo_io_gloo_projects_gloo_api_external_envoy_config_core_v3_substitution_format_string_proto_goTypes, + DependencyIndexes: file_github_com_solo_io_gloo_projects_gloo_api_external_envoy_config_core_v3_substitution_format_string_proto_depIdxs, + MessageInfos: file_github_com_solo_io_gloo_projects_gloo_api_external_envoy_config_core_v3_substitution_format_string_proto_msgTypes, + }.Build() + File_github_com_solo_io_gloo_projects_gloo_api_external_envoy_config_core_v3_substitution_format_string_proto = out.File + file_github_com_solo_io_gloo_projects_gloo_api_external_envoy_config_core_v3_substitution_format_string_proto_goTypes = nil + file_github_com_solo_io_gloo_projects_gloo_api_external_envoy_config_core_v3_substitution_format_string_proto_depIdxs = nil +} diff --git a/projects/gloo/pkg/api/v1/options/set_filter_state/set_filter_state.pb.go b/projects/gloo/pkg/api/v1/options/set_filter_state/set_filter_state.pb.go index 3f21c891357..57be91f41de 100644 --- a/projects/gloo/pkg/api/v1/options/set_filter_state/set_filter_state.pb.go +++ b/projects/gloo/pkg/api/v1/options/set_filter_state/set_filter_state.pb.go @@ -12,6 +12,7 @@ import ( unsafe "unsafe" _ "github.com/envoyproxy/protoc-gen-validate/validate" + v3 "github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3" _ "github.com/solo-io/protoc-gen-ext/extproto" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" @@ -131,6 +132,10 @@ type FilterStateValue struct { // Optional filter object factory lookup key. See :ref:`the well-known filter state keys ` // for a list of valid factory keys. FactoryKey string `protobuf:"bytes,6,opt,name=factory_key,json=factoryKey,proto3" json:"factory_key,omitempty"` + // Types that are valid to be assigned to Value: + // + // *FilterStateValue_FormatString + Value isFilterStateValue_Value `protobuf_oneof:"value"` // If marked as read-only, the filter state key value is locked, and cannot // be overridden by any filter, including this filter. ReadOnly bool `protobuf:"varint,3,opt,name=read_only,json=readOnly,proto3" json:"read_only,omitempty"` @@ -198,6 +203,22 @@ func (x *FilterStateValue) GetFactoryKey() string { return "" } +func (x *FilterStateValue) GetValue() isFilterStateValue_Value { + if x != nil { + return x.Value + } + return nil +} + +func (x *FilterStateValue) GetFormatString() *v3.SubstitutionFormatString { + if x != nil { + if x, ok := x.Value.(*FilterStateValue_FormatString); ok { + return x.FormatString + } + } + return nil +} + func (x *FilterStateValue) GetReadOnly() bool { if x != nil { return x.ReadOnly @@ -232,6 +253,18 @@ type FilterStateValue_ObjectKey struct { func (*FilterStateValue_ObjectKey) isFilterStateValue_Key() {} +type isFilterStateValue_Value interface { + isFilterStateValue_Value() +} + +type FilterStateValue_FormatString struct { + // Uses the :ref:`format string ` to + // instantiate the filter state object value. + FormatString *v3.SubstitutionFormatString `protobuf:"bytes,2,opt,name=format_string,json=formatString,proto3,oneof"` +} + +func (*FilterStateValue_FormatString) isFilterStateValue_Value() {} + var File_github_com_solo_io_gloo_projects_gloo_api_v1_options_set_filter_state_set_filter_state_proto protoreflect.FileDescriptor var file_github_com_solo_io_gloo_projects_gloo_api_v1_options_set_filter_state_set_filter_state_proto_rawDesc = string([]byte{ @@ -246,42 +279,55 @@ var file_github_com_solo_io_gloo_projects_gloo_api_v1_options_set_filter_state_s 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x1a, 0x12, 0x65, 0x78, 0x74, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x22, 0x77, 0x0a, 0x0e, 0x53, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x12, 0x65, 0x0a, 0x12, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x37, 0x2e, 0x73, 0x65, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, - 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x10, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x22, 0xe2, 0x02, 0x0a, 0x10, - 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x28, 0x0a, 0x0a, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x48, 0x00, 0x52, - 0x09, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x61, - 0x63, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0a, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x4b, 0x65, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x72, - 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, - 0x72, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x7c, 0x0a, 0x14, 0x73, 0x68, 0x61, 0x72, - 0x65, 0x64, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x4a, 0x2e, 0x73, 0x65, 0x74, 0x5f, 0x66, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x46, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x2e, - 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x57, 0x69, 0x74, 0x68, 0x55, 0x70, 0x73, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x52, 0x12, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x57, 0x69, 0x74, 0x68, 0x55, 0x70, - 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x22, 0x0a, 0x0d, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x69, - 0x66, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x73, - 0x6b, 0x69, 0x70, 0x49, 0x66, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x38, 0x0a, 0x12, 0x53, 0x68, - 0x61, 0x72, 0x65, 0x64, 0x57, 0x69, 0x74, 0x68, 0x55, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x4f, 0x4e, - 0x43, 0x45, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x49, 0x54, 0x49, - 0x56, 0x45, 0x10, 0x02, 0x42, 0x0a, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x03, 0xf8, 0x42, 0x01, - 0x42, 0x4b, 0x5a, 0x49, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, + 0x74, 0x6f, 0x1a, 0x68, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x6f, 0x6c, 0x6f, 0x2d, 0x69, 0x6f, 0x2f, 0x67, 0x6c, 0x6f, 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x73, 0x2f, 0x67, 0x6c, 0x6f, 0x6f, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x73, 0x65, 0x74, - 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x63, 0x74, 0x73, 0x2f, 0x67, 0x6c, 0x6f, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x65, 0x78, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2f, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x33, 0x2f, 0x73, 0x75, 0x62, 0x73, + 0x74, 0x69, 0x74, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x5f, + 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x77, 0x0a, 0x0e, + 0x53, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x65, + 0x0a, 0x12, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x73, 0x65, 0x74, + 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x6f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, + 0x69, 0x6f, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x52, 0x10, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x73, 0x22, 0xcf, 0x03, 0x0a, 0x10, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x28, 0x0a, 0x0a, 0x6f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, + 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x48, 0x00, 0x52, 0x09, 0x6f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x4b, 0x65, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x5f, + 0x6b, 0x65, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x61, 0x63, 0x74, 0x6f, + 0x72, 0x79, 0x4b, 0x65, 0x79, 0x12, 0x5d, 0x0a, 0x0d, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x5f, + 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x73, + 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x33, 0x2e, 0x53, 0x75, 0x62, 0x73, + 0x74, 0x69, 0x74, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x48, 0x01, 0x52, 0x0c, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, + 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, + 0x79, 0x12, 0x7c, 0x0a, 0x14, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x5f, 0x77, 0x69, 0x74, 0x68, + 0x5f, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x4a, 0x2e, 0x73, 0x65, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, + 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x57, + 0x69, 0x74, 0x68, 0x55, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x12, 0x73, 0x68, 0x61, + 0x72, 0x65, 0x64, 0x57, 0x69, 0x74, 0x68, 0x55, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, + 0x22, 0x0a, 0x0d, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x69, 0x66, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x73, 0x6b, 0x69, 0x70, 0x49, 0x66, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x22, 0x38, 0x0a, 0x12, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x57, 0x69, 0x74, + 0x68, 0x55, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, + 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x4f, 0x4e, 0x43, 0x45, 0x10, 0x01, 0x12, 0x0e, 0x0a, + 0x0a, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x49, 0x54, 0x49, 0x56, 0x45, 0x10, 0x02, 0x42, 0x0a, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x03, 0xf8, 0x42, 0x01, 0x42, 0x0c, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x03, 0xf8, 0x42, 0x01, 0x42, 0x4b, 0x5a, 0x49, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x6f, 0x6c, 0x6f, 0x2d, 0x69, 0x6f, 0x2f, 0x67, 0x6c, + 0x6f, 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x67, 0x6c, 0x6f, 0x6f, + 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2f, 0x73, 0x65, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, }) var ( @@ -302,15 +348,17 @@ var file_github_com_solo_io_gloo_projects_gloo_api_v1_options_set_filter_state_s (FilterStateValue_SharedWithUpstream)(0), // 0: set_filter_state.options.gloo.solo.io.FilterStateValue.SharedWithUpstream (*SetFilterState)(nil), // 1: set_filter_state.options.gloo.solo.io.SetFilterState (*FilterStateValue)(nil), // 2: set_filter_state.options.gloo.solo.io.FilterStateValue + (*v3.SubstitutionFormatString)(nil), // 3: solo.io.envoy.config.core.v3.SubstitutionFormatString } var file_github_com_solo_io_gloo_projects_gloo_api_v1_options_set_filter_state_set_filter_state_proto_depIdxs = []int32{ 2, // 0: set_filter_state.options.gloo.solo.io.SetFilterState.on_request_headers:type_name -> set_filter_state.options.gloo.solo.io.FilterStateValue - 0, // 1: set_filter_state.options.gloo.solo.io.FilterStateValue.shared_with_upstream:type_name -> set_filter_state.options.gloo.solo.io.FilterStateValue.SharedWithUpstream - 2, // [2:2] is the sub-list for method output_type - 2, // [2:2] is the sub-list for method input_type - 2, // [2:2] is the sub-list for extension type_name - 2, // [2:2] is the sub-list for extension extendee - 0, // [0:2] is the sub-list for field type_name + 3, // 1: set_filter_state.options.gloo.solo.io.FilterStateValue.format_string:type_name -> solo.io.envoy.config.core.v3.SubstitutionFormatString + 0, // 2: set_filter_state.options.gloo.solo.io.FilterStateValue.shared_with_upstream:type_name -> set_filter_state.options.gloo.solo.io.FilterStateValue.SharedWithUpstream + 3, // [3:3] is the sub-list for method output_type + 3, // [3:3] is the sub-list for method input_type + 3, // [3:3] is the sub-list for extension type_name + 3, // [3:3] is the sub-list for extension extendee + 0, // [0:3] is the sub-list for field type_name } func init() { @@ -322,6 +370,7 @@ func file_github_com_solo_io_gloo_projects_gloo_api_v1_options_set_filter_state_ } file_github_com_solo_io_gloo_projects_gloo_api_v1_options_set_filter_state_set_filter_state_proto_msgTypes[1].OneofWrappers = []any{ (*FilterStateValue_ObjectKey)(nil), + (*FilterStateValue_FormatString)(nil), } type x struct{} out := protoimpl.TypeBuilder{ From 0a56402b63fdf145ec7028e1bdf558712be2aa19 Mon Sep 17 00:00:00 2001 From: sheidkamp Date: Fri, 7 Mar 2025 15:40:19 -0500 Subject: [PATCH 5/7] more generation --- .../gloo/crds/gateway.solo.io_v1_Gateway.yaml | 4 + ...gateway.solo.io_v1_HttpListenerOption.yaml | 2 + ...teway.solo.io_v1_MatchableHttpGateway.yaml | 2 + .../crds/gateway.solo.io_v1_RouteOption.yaml | 2 + .../crds/gateway.solo.io_v1_RouteTable.yaml | 2 + .../gateway.solo.io_v1_VirtualHostOption.yaml | 2 + .../gateway.solo.io_v1_VirtualService.yaml | 4 + .../core/v3/substitution_format_string.proto | 19 ++ .../core/v3/substitution_format_string.pb.go | 121 +++++--- .../pkg/plugins/set_filter_state/plugin.go | 283 +++++++++++------- .../plugins/set_filter_state/plugin_test.go | 54 ++++ .../set_filter_state_suite_test.go | 13 + test/e2e/access_log_test.go | 39 ++- 13 files changed, 385 insertions(+), 162 deletions(-) create mode 100644 projects/gloo/pkg/plugins/set_filter_state/plugin_test.go create mode 100644 projects/gloo/pkg/plugins/set_filter_state/set_filter_state_suite_test.go diff --git a/install/helm/gloo/crds/gateway.solo.io_v1_Gateway.yaml b/install/helm/gloo/crds/gateway.solo.io_v1_Gateway.yaml index b1d3db39e46..0d969abe078 100644 --- a/install/helm/gloo/crds/gateway.solo.io_v1_Gateway.yaml +++ b/install/helm/gloo/crds/gateway.solo.io_v1_Gateway.yaml @@ -1376,6 +1376,8 @@ spec: type: object omitEmptyValues: type: boolean + textFormat: + type: string textFormatSource: properties: filename: @@ -3512,6 +3514,8 @@ spec: type: object omitEmptyValues: type: boolean + textFormat: + type: string textFormatSource: properties: filename: diff --git a/install/helm/gloo/crds/gateway.solo.io_v1_HttpListenerOption.yaml b/install/helm/gloo/crds/gateway.solo.io_v1_HttpListenerOption.yaml index cae5f9a694b..4db05b06b35 100644 --- a/install/helm/gloo/crds/gateway.solo.io_v1_HttpListenerOption.yaml +++ b/install/helm/gloo/crds/gateway.solo.io_v1_HttpListenerOption.yaml @@ -1367,6 +1367,8 @@ spec: type: object omitEmptyValues: type: boolean + textFormat: + type: string textFormatSource: properties: filename: diff --git a/install/helm/gloo/crds/gateway.solo.io_v1_MatchableHttpGateway.yaml b/install/helm/gloo/crds/gateway.solo.io_v1_MatchableHttpGateway.yaml index 7e80863528e..50850e0e4a3 100644 --- a/install/helm/gloo/crds/gateway.solo.io_v1_MatchableHttpGateway.yaml +++ b/install/helm/gloo/crds/gateway.solo.io_v1_MatchableHttpGateway.yaml @@ -1370,6 +1370,8 @@ spec: type: object omitEmptyValues: type: boolean + textFormat: + type: string textFormatSource: properties: filename: diff --git a/install/helm/gloo/crds/gateway.solo.io_v1_RouteOption.yaml b/install/helm/gloo/crds/gateway.solo.io_v1_RouteOption.yaml index e4d96ee123d..cb7b2259469 100644 --- a/install/helm/gloo/crds/gateway.solo.io_v1_RouteOption.yaml +++ b/install/helm/gloo/crds/gateway.solo.io_v1_RouteOption.yaml @@ -1729,6 +1729,8 @@ spec: type: object omitEmptyValues: type: boolean + textFormat: + type: string textFormatSource: properties: filename: diff --git a/install/helm/gloo/crds/gateway.solo.io_v1_RouteTable.yaml b/install/helm/gloo/crds/gateway.solo.io_v1_RouteTable.yaml index c7cde63de9b..074a035b1d6 100644 --- a/install/helm/gloo/crds/gateway.solo.io_v1_RouteTable.yaml +++ b/install/helm/gloo/crds/gateway.solo.io_v1_RouteTable.yaml @@ -1839,6 +1839,8 @@ spec: type: object omitEmptyValues: type: boolean + textFormat: + type: string textFormatSource: properties: filename: diff --git a/install/helm/gloo/crds/gateway.solo.io_v1_VirtualHostOption.yaml b/install/helm/gloo/crds/gateway.solo.io_v1_VirtualHostOption.yaml index 40318600256..a55c0cb465d 100644 --- a/install/helm/gloo/crds/gateway.solo.io_v1_VirtualHostOption.yaml +++ b/install/helm/gloo/crds/gateway.solo.io_v1_VirtualHostOption.yaml @@ -1397,6 +1397,8 @@ spec: type: object omitEmptyValues: type: boolean + textFormat: + type: string textFormatSource: properties: filename: diff --git a/install/helm/gloo/crds/gateway.solo.io_v1_VirtualService.yaml b/install/helm/gloo/crds/gateway.solo.io_v1_VirtualService.yaml index 07dd12692f9..dcadefde11e 100644 --- a/install/helm/gloo/crds/gateway.solo.io_v1_VirtualService.yaml +++ b/install/helm/gloo/crds/gateway.solo.io_v1_VirtualService.yaml @@ -1487,6 +1487,8 @@ spec: type: object omitEmptyValues: type: boolean + textFormat: + type: string textFormatSource: properties: filename: @@ -5006,6 +5008,8 @@ spec: type: object omitEmptyValues: type: boolean + textFormat: + type: string textFormatSource: properties: filename: diff --git a/projects/gloo/api/external/envoy/config/core/v3/substitution_format_string.proto b/projects/gloo/api/external/envoy/config/core/v3/substitution_format_string.proto index f2aef08d05d..4ba0db8ff31 100644 --- a/projects/gloo/api/external/envoy/config/core/v3/substitution_format_string.proto +++ b/projects/gloo/api/external/envoy/config/core/v3/substitution_format_string.proto @@ -31,6 +31,25 @@ message SubstitutionFormatString { oneof format { option (validate.required) = true; + // Specify a format with command operators to form a text string. + // Its details is described in :ref:`format string`. + // + // For example, setting ``text_format`` like below, + // + // .. validated-code-block:: yaml + // :type-name: envoy.config.core.v3.SubstitutionFormatString + // + // text_format: "%LOCAL_REPLY_BODY%:%RESPONSE_CODE%:path=%REQ(:path)%\n" + // + // generates plain text similar to: + // + // .. code-block:: text + // + // upstream connect error:503:path=/foo + // + // Deprecated in favor of :ref:`text_format_source `. To migrate text format strings, use the :ref:`inline_string ` field. + string text_format = 1 [deprecated = true]; + // Specify a format with command operators to form a JSON string. // Its details is described in :ref:`format dictionary`. // Values are rendered as strings, numbers, or boolean values as appropriate. diff --git a/projects/gloo/pkg/api/external/envoy/config/core/v3/substitution_format_string.pb.go b/projects/gloo/pkg/api/external/envoy/config/core/v3/substitution_format_string.pb.go index cadcd34d7bd..486d7d9b9e4 100644 --- a/projects/gloo/pkg/api/external/envoy/config/core/v3/substitution_format_string.pb.go +++ b/projects/gloo/pkg/api/external/envoy/config/core/v3/substitution_format_string.pb.go @@ -78,6 +78,7 @@ type SubstitutionFormatString struct { state protoimpl.MessageState `protogen:"open.v1"` // Types that are valid to be assigned to Format: // + // *SubstitutionFormatString_TextFormat // *SubstitutionFormatString_JsonFormat // *SubstitutionFormatString_TextFormatSource Format isSubstitutionFormatString_Format `protobuf_oneof:"format"` @@ -144,6 +145,16 @@ func (x *SubstitutionFormatString) GetFormat() isSubstitutionFormatString_Format return nil } +// Deprecated: Marked as deprecated in github.com/solo-io/gloo/projects/gloo/api/external/envoy/config/core/v3/substitution_format_string.proto. +func (x *SubstitutionFormatString) GetTextFormat() string { + if x != nil { + if x, ok := x.Format.(*SubstitutionFormatString_TextFormat); ok { + return x.TextFormat + } + } + return "" +} + func (x *SubstitutionFormatString) GetJsonFormat() *structpb.Struct { if x != nil { if x, ok := x.Format.(*SubstitutionFormatString_JsonFormat); ok { @@ -194,6 +205,30 @@ type isSubstitutionFormatString_Format interface { isSubstitutionFormatString_Format() } +type SubstitutionFormatString_TextFormat struct { + // Specify a format with command operators to form a text string. + // Its details is described in :ref:`format string`. + // + // For example, setting “text_format“ like below, + // + // .. validated-code-block:: yaml + // + // :type-name: envoy.config.core.v3.SubstitutionFormatString + // + // text_format: "%LOCAL_REPLY_BODY%:%RESPONSE_CODE%:path=%REQ(:path)%\n" + // + // generates plain text similar to: + // + // .. code-block:: text + // + // upstream connect error:503:path=/foo + // + // Deprecated in favor of :ref:`text_format_source `. To migrate text format strings, use the :ref:`inline_string ` field. + // + // Deprecated: Marked as deprecated in github.com/solo-io/gloo/projects/gloo/api/external/envoy/config/core/v3/substitution_format_string.proto. + TextFormat string `protobuf:"bytes,1,opt,name=text_format,json=textFormat,proto3,oneof"` +} + type SubstitutionFormatString_JsonFormat struct { // Specify a format with command operators to form a JSON string. // Its details is described in :ref:`format dictionary`. @@ -241,6 +276,8 @@ type SubstitutionFormatString_TextFormatSource struct { TextFormatSource *DataSource `protobuf:"bytes,5,opt,name=text_format_source,json=textFormatSource,proto3,oneof"` } +func (*SubstitutionFormatString_TextFormat) isSubstitutionFormatString_Format() {} + func (*SubstitutionFormatString_JsonFormat) isSubstitutionFormatString_Format() {} func (*SubstitutionFormatString_TextFormatSource) isSubstitutionFormatString_Format() {} @@ -276,47 +313,50 @@ var file_github_com_solo_io_gloo_projects_gloo_api_external_envoy_config_core_v3 0x73, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x73, 0x6f, 0x72, 0x74, 0x50, - 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x22, 0xda, 0x03, 0x0a, 0x18, 0x53, 0x75, + 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x22, 0x81, 0x04, 0x0a, 0x18, 0x53, 0x75, + 0x62, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x25, 0x0a, 0x0b, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x66, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x48, + 0x00, 0x52, 0x0a, 0x74, 0x65, 0x78, 0x74, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x44, 0x0a, + 0x0b, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x42, 0x08, 0xfa, 0x42, 0x05, + 0x8a, 0x01, 0x02, 0x10, 0x01, 0x48, 0x00, 0x52, 0x0a, 0x6a, 0x73, 0x6f, 0x6e, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x12, 0x58, 0x0a, 0x12, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x28, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x33, 0x2e, 0x44, + 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, 0x10, 0x74, 0x65, 0x78, + 0x74, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x2a, 0x0a, + 0x11, 0x6f, 0x6d, 0x69, 0x74, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x6f, 0x6d, 0x69, 0x74, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x2e, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x0b, 0xfa, 0x42, 0x08, 0x72, 0x06, 0xc8, 0x01, 0x00, 0xc0, 0x01, 0x02, 0x52, 0x0b, 0x63, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x52, 0x0a, 0x0a, 0x66, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x74, 0x65, 0x72, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, + 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x33, 0x2e, 0x54, 0x79, 0x70, + 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x52, 0x0a, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x74, 0x65, 0x72, 0x73, 0x12, 0x5f, 0x0a, + 0x13, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x5f, 0x6f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x73, 0x6f, 0x6c, + 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x33, 0x2e, 0x4a, 0x73, 0x6f, 0x6e, 0x46, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x11, 0x6a, 0x73, 0x6f, + 0x6e, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x0d, + 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x03, 0xf8, 0x42, 0x01, 0x42, 0x9a, 0x01, + 0x0a, 0x2a, 0x69, 0x6f, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, + 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x33, 0x42, 0x1d, 0x53, 0x75, 0x62, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, - 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x44, 0x0a, 0x0b, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x66, - 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, - 0x72, 0x75, 0x63, 0x74, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x48, 0x00, - 0x52, 0x0a, 0x6a, 0x73, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x58, 0x0a, 0x12, - 0x74, 0x65, 0x78, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x5f, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, - 0x69, 0x6f, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x33, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x48, 0x00, 0x52, 0x10, 0x74, 0x65, 0x78, 0x74, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, - 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x6f, 0x6d, 0x69, 0x74, 0x5f, 0x65, - 0x6d, 0x70, 0x74, 0x79, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0f, 0x6f, 0x6d, 0x69, 0x74, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x73, 0x12, 0x2e, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xfa, 0x42, 0x08, 0x72, 0x06, 0xc8, - 0x01, 0x00, 0xc0, 0x01, 0x02, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x52, 0x0a, 0x0a, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x74, 0x65, 0x72, 0x73, - 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, - 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x76, 0x33, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, - 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0a, 0x66, 0x6f, 0x72, 0x6d, - 0x61, 0x74, 0x74, 0x65, 0x72, 0x73, 0x12, 0x5f, 0x0a, 0x13, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x66, - 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x65, 0x6e, - 0x76, 0x6f, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x76, 0x33, 0x2e, 0x4a, 0x73, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x4f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x11, 0x6a, 0x73, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, - 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x0d, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, - 0x74, 0x12, 0x03, 0xf8, 0x42, 0x01, 0x42, 0x9a, 0x01, 0x0a, 0x2a, 0x69, 0x6f, 0x2e, 0x65, 0x6e, - 0x76, 0x6f, 0x79, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, - 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x76, 0x33, 0x42, 0x1d, 0x53, 0x75, 0x62, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x73, 0x6f, 0x6c, 0x6f, 0x2d, 0x69, 0x6f, 0x2f, 0x67, 0x6c, 0x6f, 0x6f, 0x2f, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x67, 0x6c, 0x6f, 0x6f, 0x2f, 0x70, 0x6b, - 0x67, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x65, - 0x6e, 0x76, 0x6f, 0x79, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x63, 0x6f, 0x72, 0x65, - 0x2f, 0x76, 0x33, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x4b, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x6f, 0x6c, 0x6f, 0x2d, 0x69, + 0x6f, 0x2f, 0x67, 0x6c, 0x6f, 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, + 0x67, 0x6c, 0x6f, 0x6f, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x65, 0x78, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x33, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, }) var ( @@ -361,6 +401,7 @@ func file_github_com_solo_io_gloo_projects_gloo_api_external_envoy_config_core_v file_github_com_solo_io_gloo_projects_gloo_api_external_envoy_config_core_v3_base_proto_init() file_github_com_solo_io_gloo_projects_gloo_api_external_envoy_config_core_v3_extension_proto_init() file_github_com_solo_io_gloo_projects_gloo_api_external_envoy_config_core_v3_substitution_format_string_proto_msgTypes[1].OneofWrappers = []any{ + (*SubstitutionFormatString_TextFormat)(nil), (*SubstitutionFormatString_JsonFormat)(nil), (*SubstitutionFormatString_TextFormatSource)(nil), } diff --git a/projects/gloo/pkg/plugins/set_filter_state/plugin.go b/projects/gloo/pkg/plugins/set_filter_state/plugin.go index 469bcfcad7b..afb67f05399 100644 --- a/projects/gloo/pkg/plugins/set_filter_state/plugin.go +++ b/projects/gloo/pkg/plugins/set_filter_state/plugin.go @@ -7,19 +7,17 @@ import ( "fmt" corev3 "github.com/envoyproxy/go-control-plane/envoy/config/core/v3" - envoy_config_route_v3 "github.com/envoyproxy/go-control-plane/envoy/config/route/v3" common_set_filter_state_v3 "github.com/envoyproxy/go-control-plane/envoy/extensions/filters/common/set_filter_state/v3" http_set_filter_state_v3 "github.com/envoyproxy/go-control-plane/envoy/extensions/filters/http/set_filter_state/v3" + gloo_envoy_core_v3 "github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3" v1 "github.com/solo-io/gloo/projects/gloo/pkg/api/v1" + "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/set_filter_state" "github.com/solo-io/gloo/projects/gloo/pkg/plugins" - "github.com/solo-io/gloo/projects/gloo/pkg/plugins/pluginutils" ) var ( - _ plugins.Plugin = new(plugin) - _ plugins.RoutePlugin = new(plugin) - //_ plugins.HttpFilterPlugin = new(plugin) - _ plugins.VirtualHostPlugin = new(plugin) + _ plugins.Plugin = new(plugin) + _ plugins.HttpFilterPlugin = new(plugin) ) var ( @@ -40,126 +38,211 @@ func (p *plugin) Name() string { func (p *plugin) Init(_ plugins.InitParams) {} func NewPlugin() *plugin { - fmt.Printf("--------------------------------\nSET STATE FILTER NEW PLUGIN \n--------------------------------\n") return &plugin{} } -func (p *plugin) ProcessRoute(params plugins.RouteParams, in *v1.Route, out *envoy_config_route_v3.Route) error { - cfg := in.GetOptions().GetSetFilterState() +func (p *plugin) HttpFilters(params plugins.Params, listener *v1.HttpListener) ([]plugins.StagedHttpFilter, error) { + + cfg := listener.GetOptions().GetSetFilterState() if cfg == nil { - fmt.Printf("--------------------------------\nSET STATE FILTER ProcessRoute (NULL) \n--------------------------------\n") - return nil - } else { - fmt.Printf("--------------------------------\nSET STATE FILTER ProcessRoute %+v \n--------------------------------\n", cfg) + return nil, nil } - // filterCfg := &http_set_filter_state_v3.Config{} + filter, err := translateFilter(cfg) + if err != nil { + return nil, err + } - // // for _, onRequestHeader := range cfg.GetOnRequestHeaders() { - // // filterCfg.OnRequestHeaders = append(filterCfg.OnRequestHeaders, toEnvoyFilterStateValue(onRequestHeader)) - // // } + return []plugins.StagedHttpFilter{plugins.MustNewStagedFilter(FilterName, filter, pluginStage)}, nil - // fmt.Printf("--------------------------------\nSET STATE FILTER ProcessRoute \n--------------------------------\n") - // filterCfg.OnRequestHeaders = append(filterCfg.OnRequestHeaders, toEnvoyFilterStateValue(&set_filter_state.FilterStateValue{})) +} - // //return pluginutils.SetRoutePerFilterConfig(out, FilterName, filterCfg) - // marshaled, err := utils.MessageToAny(filterCfg) - // if err != nil { - // return err - // } - // out.TypedPerFilterConfig[FilterName] = marshaled - pluginutils.SetRoutePerFilterConfig(out, FilterName, hardcodedFilterState("2")) +// const testKey = "envoy.ratelimit.hits_addend" - return nil -} +// func hardcodedFilterState(num string) *http_set_filter_state_v3.Config { +// return &http_set_filter_state_v3.Config{ +// OnRequestHeaders: []*common_set_filter_state_v3.FilterStateValue{ +// { +// Key: &common_set_filter_state_v3.FilterStateValue_ObjectKey{ +// ObjectKey: testKey, +// }, +// Value: &common_set_filter_state_v3.FilterStateValue_FormatString{ +// FormatString: &corev3.SubstitutionFormatString{ +// Format: &corev3.SubstitutionFormatString_TextFormat{ +// TextFormat: num, +// }, +// }, +// }, +// }, +// }, +// } +// } -func (p *plugin) HttpFilters(params plugins.Params, listener *v1.HttpListener) ([]plugins.StagedHttpFilter, error) { - var filters []plugins.StagedHttpFilter +// func hardcodedFilter(num string) plugins.StagedHttpFilter { +// return plugins.MustNewStagedFilter( +// FilterName, +// hardcodedFilterState(num), +// pluginStage, +// ) +// } - fmt.Printf("--------------------------------\nSET STATE FILTER HttpFilters\n--------------------------------\n") - cfg := listener.GetOptions().GetSetFilterState() - if cfg == nil { - fmt.Printf("--------------------------------\nSET STATE FILTER HttpFilters (NULL) \n--------------------------------\n") - return filters, nil - } else { - fmt.Printf("--------------------------------\nSET STATE FILTER HttpFilters (NOT NULL) %+v \n--------------------------------\n", cfg) +func translateFilter(cfg *set_filter_state.SetFilterState) (*http_set_filter_state_v3.Config, error) { + onRequestHeaders := cfg.GetOnRequestHeaders() + + if onRequestHeaders == nil { + return nil, nil } - // fsv := toEnvoyFilterStateValue(&set_filter_state.FilterStateValue{}) + fsvs := []*common_set_filter_state_v3.FilterStateValue{} - // filters = append(filters, - // plugins.MustNewStagedFilter(FilterName, - // &envoytransformation.FilterTransformations{ - // LogRequestResponseInfo: p.logRequestResponseInfo, - // }, - // pluginStage), - // ) + for _, fsv := range onRequestHeaders { + fsv, err := translateFilterStateValue(fsv) + if err != nil { + return nil, err + } + fsvs = append(fsvs, fsv) + } - filters = append(filters, hardcodedFilter("1")) - return filters, nil + return &http_set_filter_state_v3.Config{ + OnRequestHeaders: fsvs, + }, nil +} +func translateFilterStateValue(fsv *set_filter_state.FilterStateValue) (*common_set_filter_state_v3.FilterStateValue, error) { + sharedWithUpstream, err := translateSharedWithUpstream(fsv.GetSharedWithUpstream()) + if err != nil { + return nil, err + } + + fsvValue, err := translateFsvValue(fsv) + if err != nil { + return nil, err + } + + return &common_set_filter_state_v3.FilterStateValue{ + Key: &common_set_filter_state_v3.FilterStateValue_ObjectKey{ + ObjectKey: fsv.GetObjectKey(), + }, + FactoryKey: fsv.GetFactoryKey(), + ReadOnly: fsv.GetReadOnly(), + SharedWithUpstream: sharedWithUpstream, + SkipIfEmpty: fsv.GetSkipIfEmpty(), + Value: fsvValue, + }, nil } -func (p *plugin) ProcessVirtualHost( - params plugins.VirtualHostParams, - in *v1.VirtualHost, - out *envoy_config_route_v3.VirtualHost, -) error { - cfg := in.GetOptions().GetSetFilterState() - if cfg == nil { - fmt.Printf("--------------------------------\nSET STATE FILTER ProcessVirtualHost (NULL) \n--------------------------------\n") - return nil - } else { - fmt.Printf("--------------------------------\nSET STATE FILTER ProcessVirtualHost %+v \n--------------------------------\n", cfg) +func translateSharedWithUpstream(sharedWithUpstream set_filter_state.FilterStateValue_SharedWithUpstream) (common_set_filter_state_v3.FilterStateValue_SharedWithUpstream, error) { + switch sharedWithUpstream { + case set_filter_state.FilterStateValue_NONE: + return common_set_filter_state_v3.FilterStateValue_NONE, nil + case set_filter_state.FilterStateValue_ONCE: + return common_set_filter_state_v3.FilterStateValue_ONCE, nil + case set_filter_state.FilterStateValue_TRANSITIVE: + return common_set_filter_state_v3.FilterStateValue_TRANSITIVE, nil + default: + return common_set_filter_state_v3.FilterStateValue_NONE, fmt.Errorf("invalid sharedWithUpstream: %v", sharedWithUpstream) } +} - return pluginutils.SetVhostPerFilterConfig(out, FilterName, hardcodedFilterState("4")) +func translateFsvValue(v *set_filter_state.FilterStateValue) (*common_set_filter_state_v3.FilterStateValue_FormatString, error) { + // v.GetValue is a oneof that can only be a FormatString + switch val := v.GetValue().(type) { + case *set_filter_state.FilterStateValue_FormatString: + if val.FormatString == nil { + return nil, nil + } + + formatString, err := translateFormatString(val.FormatString) + if err != nil { + return nil, err + } + + formatString.OmitEmptyValues = val.FormatString.GetOmitEmptyValues() + formatString.ContentType = val.FormatString.GetContentType() + formatString.Formatters = translateFormatters(val.FormatString.GetFormatters()) + formatString.JsonFormatOptions = &corev3.JsonFormatOptions{ + SortProperties: val.FormatString.GetJsonFormatOptions().GetSortProperties(), + } + + return &common_set_filter_state_v3.FilterStateValue_FormatString{ + FormatString: formatString, + }, nil + default: + return nil, fmt.Errorf("invalid value type: %T", val) + } } -const testKey = "envoy.ratelimit.hits_addend" +func translateFormatters(formatters []*gloo_envoy_core_v3.TypedExtensionConfig) []*corev3.TypedExtensionConfig { + out := make([]*corev3.TypedExtensionConfig, len(formatters)) -func hardcodedFilterState(num string) *http_set_filter_state_v3.Config { - return &http_set_filter_state_v3.Config{ - OnRequestHeaders: []*common_set_filter_state_v3.FilterStateValue{ - { - Key: &common_set_filter_state_v3.FilterStateValue_ObjectKey{ - ObjectKey: testKey, - }, - Value: &common_set_filter_state_v3.FilterStateValue_FormatString{ - FormatString: &corev3.SubstitutionFormatString{ - Format: &corev3.SubstitutionFormatString_TextFormat{ - TextFormat: num, - }, - }, - }, - }, - }, + for i, formatter := range formatters { + out[i] = &corev3.TypedExtensionConfig{ + Name: formatter.GetName(), + TypedConfig: formatter.GetTypedConfig(), + } } + return out } -func hardcodedFilter(num string) plugins.StagedHttpFilter { - return plugins.MustNewStagedFilter( - FilterName, - hardcodedFilterState(num), - pluginStage, - ) +func translateFormatString(fs *gloo_envoy_core_v3.SubstitutionFormatString) (*corev3.SubstitutionFormatString, error) { + if fs == nil { + return nil, nil + } + + switch fs.GetFormat().(type) { + case *gloo_envoy_core_v3.SubstitutionFormatString_TextFormat: + return &corev3.SubstitutionFormatString{ + Format: &corev3.SubstitutionFormatString_TextFormat{ + TextFormat: fs.GetTextFormat(), + }, + }, nil + case *gloo_envoy_core_v3.SubstitutionFormatString_JsonFormat: + return &corev3.SubstitutionFormatString{ + Format: &corev3.SubstitutionFormatString_JsonFormat{ + JsonFormat: fs.GetJsonFormat(), + }, + }, nil + case *gloo_envoy_core_v3.SubstitutionFormatString_TextFormatSource: + textFormatSource, err := translateDataSource(fs.GetTextFormatSource()) + if err != nil { + return nil, err + } + return &corev3.SubstitutionFormatString{ + Format: &corev3.SubstitutionFormatString_TextFormatSource{ + TextFormatSource: textFormatSource, + }, + }, nil + default: + return nil, fmt.Errorf("invalid format type: %T", fs.GetFormat()) + } } -// func toEnvoyFilterStateValue(_ *set_filter_state.FilterStateValue) *common_set_filter_state_v3.FilterStateValue { -// return &common_set_filter_state_v3.FilterStateValue{ -// Key: &common_set_filter_state_v3.FilterStateValue_ObjectKey{ -// ObjectKey: testKey, -// }, -// Value: &common_set_filter_state_v3.FilterStateValue_FormatString{ -// FormatString: &corev3.SubstitutionFormatString{ -// Format: &corev3.SubstitutionFormatString_TextFormat{ -// TextFormat: "3", -// }, -// }, -// }, -// //FactoryKey: in.GetFactoryKey(), -// //ReadOnly: in.GetReadOnly(), -// //SharedWithUpstream: in.GetSharedWithUpstream(), -// SkipIfEmpty: true, -// } -// } +func translateDataSource(ds *gloo_envoy_core_v3.DataSource) (*corev3.DataSource, error) { + if ds == nil { + return nil, nil + } + + switch ds.GetSpecifier().(type) { + case *gloo_envoy_core_v3.DataSource_InlineBytes: + return &corev3.DataSource{ + Specifier: &corev3.DataSource_InlineBytes{ + InlineBytes: ds.GetInlineBytes(), + }, + }, nil + case *gloo_envoy_core_v3.DataSource_InlineString: + return &corev3.DataSource{ + Specifier: &corev3.DataSource_InlineString{ + InlineString: ds.GetInlineString(), + }, + }, nil + case *gloo_envoy_core_v3.DataSource_Filename: + return &corev3.DataSource{ + Specifier: &corev3.DataSource_Filename{ + Filename: ds.GetFilename(), + }, + }, nil + default: + return nil, fmt.Errorf("invalid data source type: %T", ds.GetSpecifier()) + } + +} diff --git a/projects/gloo/pkg/plugins/set_filter_state/plugin_test.go b/projects/gloo/pkg/plugins/set_filter_state/plugin_test.go new file mode 100644 index 00000000000..f5204bdb545 --- /dev/null +++ b/projects/gloo/pkg/plugins/set_filter_state/plugin_test.go @@ -0,0 +1,54 @@ +package set_filter_state_test + +import ( + http_set_filter_state_v3 "github.com/envoyproxy/go-control-plane/envoy/extensions/filters/http/set_filter_state/v3" + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" + v1 "github.com/solo-io/gloo/projects/gloo/pkg/api/v1" + "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/set_filter_state" + . "github.com/solo-io/gloo/projects/gloo/pkg/plugins/set_filter_state" +) + +type testCase struct { + input *set_filter_state.SetFilterState + output *http_set_filter_state_v3.Config +} + +var testCases = []testCase{ + {}, +} + + + + +var _ = Describe("SetFilterState Plugin", func() { + Context("Translation", func() { + for _, testCase := range testCases { + Context("OnRequestHeaders", func() { + var ( + input *set_filter_state.SetFilterState + ) + }) + } + + var () + + BeforeEach(func() { + + }) + + Context("HttpFilters", func() { + var listener *v1.HttpListener + + BeforeEach(func() { + listener = &v1.HttpListener{} + }) + + It("should return no filters if no config is provided", func() { + filters, err := p.HttpFilters(params, listener) + Expect(err).NotTo(HaveOccurred()) + Expect(filters).To(BeEmpty()) + }) + + }) +}) diff --git a/projects/gloo/pkg/plugins/set_filter_state/set_filter_state_suite_test.go b/projects/gloo/pkg/plugins/set_filter_state/set_filter_state_suite_test.go new file mode 100644 index 00000000000..07ac2a6cb7d --- /dev/null +++ b/projects/gloo/pkg/plugins/set_filter_state/set_filter_state_suite_test.go @@ -0,0 +1,13 @@ +package set_filter_state_test + +import ( + "testing" + + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" +) + +func TestSetFilterState(t *testing.T) { + RegisterFailHandler(Fail) + RunSpecs(t, "SetFilterState Suite") +} diff --git a/test/e2e/access_log_test.go b/test/e2e/access_log_test.go index 0c16f6502ee..b6de969afab 100644 --- a/test/e2e/access_log_test.go +++ b/test/e2e/access_log_test.go @@ -121,6 +121,10 @@ var _ = Describe("Access Log", func() { msgChan <-chan *envoy_data_accesslog_v3.HTTPAccessLogEntry ) + const ( + filterStateObjectName = "envoy.ratelimit.hits_addend" + ) + BeforeEach(func() { msgChan = runAccessLog(testContext.Ctx(), testContext.EnvoyInstance().AccessLogPort) @@ -136,7 +140,7 @@ var _ = Describe("Access Log", func() { StaticClusterName: alsplugin.ClusterName, }, FilterStateObjectsToLog: []string{ - "envoy.ratelimit.hits_addend", + filterStateObjectName, }, }, }, @@ -149,9 +153,19 @@ var _ = Describe("Access Log", func() { OnRequestHeaders: []*set_filter_state.FilterStateValue{ { Key: &set_filter_state.FilterStateValue_ObjectKey{ - ObjectKey: "envoy.ratelimit.hits_addend", + ObjectKey: filterStateObjectName, + }, + Value: &set_filter_state.FilterStateValue_FormatString{ + FormatString: &gloo_envoy_v3.SubstitutionFormatString{ + Format: &gloo_envoy_v3.SubstitutionFormatString_TextFormatSource{ + TextFormatSource: &gloo_envoy_v3.DataSource{ + Specifier: &gloo_envoy_v3.DataSource_InlineString{ + InlineString: "1", + }, + }, + }, + }, }, - //Value: "1", }, }, } @@ -168,25 +182,6 @@ var _ = Describe("Access Log", func() { gw, } - // vs := helpers.NewVirtualServiceBuilder(). - // WithName(e2e.DefaultVirtualServiceName). - // WithNamespace(writeNamespace). - // WithDomain(e2e.DefaultHost). - // WithRoutePrefixMatcher(e2e.DefaultRouteName, "/"). - // WithRouteAction(e2e.DefaultRouteName, &gloov1.RouteAction{ - // Destination: &gloov1.RouteAction_DynamicForwardProxy{ - // DynamicForwardProxy: &dynamic_forward_proxy.PerRouteConfig{ - // HostRewriteSpecifier: &dynamic_forward_proxy.PerRouteConfig_AutoHostRewriteHeader{ - // AutoHostRewriteHeader: "x-rewrite-me", - // }, - // }, - // }, - // }). - // Build() - - // testContext.ResourcesToCreate().VirtualServices = v1.VirtualServiceList{ - // vs, - // } }) It("can stream access logs with filter state objects", func() { From 4c6accc30a0dcb6ddeb947210e8c91fc7fa226df Mon Sep 17 00:00:00 2001 From: sheidkamp Date: Fri, 7 Mar 2025 15:42:10 -0500 Subject: [PATCH 6/7] Update route_config.go --- projects/gloo/pkg/translator/route_config.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/projects/gloo/pkg/translator/route_config.go b/projects/gloo/pkg/translator/route_config.go index 56106e86f9b..52a6b5198db 100644 --- a/projects/gloo/pkg/translator/route_config.go +++ b/projects/gloo/pkg/translator/route_config.go @@ -375,8 +375,6 @@ func (h *httpRouteConfigurationTranslator) runRoutePlugins( in *v1.Route, out *envoy_config_route_v3.Route) { // run the plugins for RoutePlugin - - fmt.Printf("Process route plugins, out: %+v\n", out) for _, plugin := range h.pluginRegistry.GetRoutePlugins() { fmt.Printf("ProcessRoute plugin: %s\n", plugin.Name()) if err := plugin.ProcessRoute(params, in, out); err != nil { @@ -389,7 +387,6 @@ func (h *httpRouteConfigurationTranslator) runRoutePlugins( err) } } - fmt.Printf("Done Process route plugins, out: %+v\n", out) } func (h *httpRouteConfigurationTranslator) runRouteActionPlugins( From fb425ac1a9e108d3dc1e0b86f4e1125888b71101 Mon Sep 17 00:00:00 2001 From: sheidkamp Date: Fri, 7 Mar 2025 16:00:54 -0500 Subject: [PATCH 7/7] remove from route and vh --- .../gloo/api/v1/route_options.proto.sk.md | 2 - .../api/v1/virtual_host_options.proto.sk.md | 2 - .../crds/gateway.solo.io_v1_RouteOption.yaml | 56 --------- .../crds/gateway.solo.io_v1_RouteTable.yaml | 56 --------- .../gateway.solo.io_v1_VirtualHostOption.yaml | 56 --------- .../gateway.solo.io_v1_VirtualService.yaml | 112 ----------------- projects/gloo/api/v1/route_options.proto | 3 - .../gloo/api/v1/virtual_host_options.proto | 4 - .../gloo/pkg/api/v1/route_options.pb.clone.go | 8 -- .../gloo/pkg/api/v1/route_options.pb.equal.go | 10 -- projects/gloo/pkg/api/v1/route_options.pb.go | 117 ++++++++---------- .../gloo/pkg/api/v1/route_options.pb.hash.go | 20 --- .../pkg/api/v1/route_options.pb.uniquehash.go | 20 --- .../api/v1/virtual_host_options.pb.clone.go | 8 -- .../api/v1/virtual_host_options.pb.equal.go | 10 -- .../pkg/api/v1/virtual_host_options.pb.go | 60 ++++----- .../api/v1/virtual_host_options.pb.hash.go | 20 --- .../v1/virtual_host_options.pb.uniquehash.go | 20 --- .../pkg/plugins/set_filter_state/plugin.go | 4 +- .../plugins/set_filter_state/plugin_test.go | 37 +++--- 20 files changed, 89 insertions(+), 536 deletions(-) diff --git a/docs/content/reference/api/github.com/solo-io/gloo/projects/gloo/api/v1/route_options.proto.sk.md b/docs/content/reference/api/github.com/solo-io/gloo/projects/gloo/api/v1/route_options.proto.sk.md index 9490f7a76d4..3d035f7ea3c 100644 --- a/docs/content/reference/api/github.com/solo-io/gloo/projects/gloo/api/v1/route_options.proto.sk.md +++ b/docs/content/reference/api/github.com/solo-io/gloo/projects/gloo/api/v1/route_options.proto.sk.md @@ -73,7 +73,6 @@ to be usable by Gloo. (plugins currently need to be compiled into Gloo) "idleTimeout": .google.protobuf.Duration "extProc": .extproc.options.gloo.solo.io.RouteSettings "ai": .ai.options.gloo.solo.io.RouteSettings -"setFilterState": .set_filter_state.options.gloo.solo.io.SetFilterState ``` @@ -119,7 +118,6 @@ to be usable by Gloo. (plugins currently need to be compiled into Gloo) | `idleTimeout` | [.google.protobuf.Duration](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/duration) | Specifies the idle timeout for the route. If not specified, there is no per-route idle timeout, although the Gateway's [httpConnectionManagerSettings](https://docs.solo.io/gloo-edge/latest/reference/api/github.com/solo-io/gloo/projects/gloo/api/v1/options/hcm/hcm.proto.sk/#httpconnectionmanagersettings) wide stream_idle_timeout will still apply. A value of 0 will completely disable the route’s idle timeout, even if a connection manager stream idle timeout is configured. Please refer to the [Envoy documentation](https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/route/v3/route_components.proto#envoy-v3-api-field-config-route-v3-routeaction-idle-timeout). | | `extProc` | [.extproc.options.gloo.solo.io.RouteSettings](../enterprise/options/extproc/extproc.proto.sk/#routesettings) | Enterprise-only: External Processing filter settings for the route. This can be used to override certain HttpListenerOptions or VirtualHostOptions settings. | | `ai` | [.ai.options.gloo.solo.io.RouteSettings](../enterprise/options/ai/ai.proto.sk/#routesettings) | Enterprise-only: Settings to configure ai settings for a route. These settings will only apply if the backend is an `ai` Upstream. | -| `setFilterState` | [.set_filter_state.options.gloo.solo.io.SetFilterState](../options/set_filter_state/set_filter_state.proto.sk/#setfilterstate) | Settings to configure set-filter-state settings for a route. | diff --git a/docs/content/reference/api/github.com/solo-io/gloo/projects/gloo/api/v1/virtual_host_options.proto.sk.md b/docs/content/reference/api/github.com/solo-io/gloo/projects/gloo/api/v1/virtual_host_options.proto.sk.md index 3e8f26fc409..79282575fde 100644 --- a/docs/content/reference/api/github.com/solo-io/gloo/projects/gloo/api/v1/virtual_host_options.proto.sk.md +++ b/docs/content/reference/api/github.com/solo-io/gloo/projects/gloo/api/v1/virtual_host_options.proto.sk.md @@ -58,7 +58,6 @@ to be usable by Gloo. (plugins currently need to be compiled into Gloo) "stagedTransformations": .transformation.options.gloo.solo.io.TransformationStages "extProc": .extproc.options.gloo.solo.io.RouteSettings "corsPolicyMergeSettings": .cors.options.gloo.solo.io.CorsPolicyMergeSettings -"setFilterState": .set_filter_state.options.gloo.solo.io.SetFilterState ``` @@ -90,7 +89,6 @@ to be usable by Gloo. (plugins currently need to be compiled into Gloo) | `stagedTransformations` | [.transformation.options.gloo.solo.io.TransformationStages](../options/transformation/transformation.proto.sk/#transformationstages) | Early transformations stage. These transformations run before most other options are processed. If the `regular` field is set in here, the `transformations` field is ignored. | | `extProc` | [.extproc.options.gloo.solo.io.RouteSettings](../enterprise/options/extproc/extproc.proto.sk/#routesettings) | Enterprise-only: External Processing filter settings for the virtual host. This can be used to override certain HttpListenerOptions settings, and can be overridden by RouteOptions settings. | | `corsPolicyMergeSettings` | [.cors.options.gloo.solo.io.CorsPolicyMergeSettings](../options/cors/cors.proto.sk/#corspolicymergesettings) | Settings for determining merge strategy for CORS settings when present at both Route and VirtualHost levels. | -| `setFilterState` | [.set_filter_state.options.gloo.solo.io.SetFilterState](../options/set_filter_state/set_filter_state.proto.sk/#setfilterstate) | SetFilterState can be used to set filter state on the request. For more, see https://www.envoyproxy.io/docs/envoy/latest/api-v2/config/filter/http/set_filter_state/v2/set_filter_state.proto. | diff --git a/install/helm/gloo/crds/gateway.solo.io_v1_RouteOption.yaml b/install/helm/gloo/crds/gateway.solo.io_v1_RouteOption.yaml index cb7b2259469..92fe63cd261 100644 --- a/install/helm/gloo/crds/gateway.solo.io_v1_RouteOption.yaml +++ b/install/helm/gloo/crds/gateway.solo.io_v1_RouteOption.yaml @@ -1698,62 +1698,6 @@ spec: retryOn: type: string type: object - setFilterState: - properties: - onRequestHeaders: - items: - properties: - factoryKey: - type: string - formatString: - properties: - contentType: - type: string - formatters: - items: - properties: - name: - type: string - typedConfig: - type: object - x-kubernetes-preserve-unknown-fields: true - type: object - type: array - jsonFormat: - type: object - x-kubernetes-preserve-unknown-fields: true - jsonFormatOptions: - properties: - sortProperties: - type: boolean - type: object - omitEmptyValues: - type: boolean - textFormat: - type: string - textFormatSource: - properties: - filename: - type: string - inlineBytes: - format: byte - type: string - inlineString: - type: string - type: object - type: object - objectKey: - type: string - readOnly: - type: boolean - sharedWithUpstream: - type: string - x-kubernetes-int-or-string: true - skipIfEmpty: - type: boolean - type: object - type: array - type: object shadowing: properties: percentage: diff --git a/install/helm/gloo/crds/gateway.solo.io_v1_RouteTable.yaml b/install/helm/gloo/crds/gateway.solo.io_v1_RouteTable.yaml index 074a035b1d6..324e52ba869 100644 --- a/install/helm/gloo/crds/gateway.solo.io_v1_RouteTable.yaml +++ b/install/helm/gloo/crds/gateway.solo.io_v1_RouteTable.yaml @@ -1808,62 +1808,6 @@ spec: retryOn: type: string type: object - setFilterState: - properties: - onRequestHeaders: - items: - properties: - factoryKey: - type: string - formatString: - properties: - contentType: - type: string - formatters: - items: - properties: - name: - type: string - typedConfig: - type: object - x-kubernetes-preserve-unknown-fields: true - type: object - type: array - jsonFormat: - type: object - x-kubernetes-preserve-unknown-fields: true - jsonFormatOptions: - properties: - sortProperties: - type: boolean - type: object - omitEmptyValues: - type: boolean - textFormat: - type: string - textFormatSource: - properties: - filename: - type: string - inlineBytes: - format: byte - type: string - inlineString: - type: string - type: object - type: object - objectKey: - type: string - readOnly: - type: boolean - sharedWithUpstream: - type: string - x-kubernetes-int-or-string: true - skipIfEmpty: - type: boolean - type: object - type: array - type: object shadowing: properties: percentage: diff --git a/install/helm/gloo/crds/gateway.solo.io_v1_VirtualHostOption.yaml b/install/helm/gloo/crds/gateway.solo.io_v1_VirtualHostOption.yaml index a55c0cb465d..c449074ee42 100644 --- a/install/helm/gloo/crds/gateway.solo.io_v1_VirtualHostOption.yaml +++ b/install/helm/gloo/crds/gateway.solo.io_v1_VirtualHostOption.yaml @@ -1366,62 +1366,6 @@ spec: retryOn: type: string type: object - setFilterState: - properties: - onRequestHeaders: - items: - properties: - factoryKey: - type: string - formatString: - properties: - contentType: - type: string - formatters: - items: - properties: - name: - type: string - typedConfig: - type: object - x-kubernetes-preserve-unknown-fields: true - type: object - type: array - jsonFormat: - type: object - x-kubernetes-preserve-unknown-fields: true - jsonFormatOptions: - properties: - sortProperties: - type: boolean - type: object - omitEmptyValues: - type: boolean - textFormat: - type: string - textFormatSource: - properties: - filename: - type: string - inlineBytes: - format: byte - type: string - inlineString: - type: string - type: object - type: object - objectKey: - type: string - readOnly: - type: boolean - sharedWithUpstream: - type: string - x-kubernetes-int-or-string: true - skipIfEmpty: - type: boolean - type: object - type: array - type: object stagedTransformations: properties: early: diff --git a/install/helm/gloo/crds/gateway.solo.io_v1_VirtualService.yaml b/install/helm/gloo/crds/gateway.solo.io_v1_VirtualService.yaml index dcadefde11e..b88d98f9a85 100644 --- a/install/helm/gloo/crds/gateway.solo.io_v1_VirtualService.yaml +++ b/install/helm/gloo/crds/gateway.solo.io_v1_VirtualService.yaml @@ -1456,62 +1456,6 @@ spec: retryOn: type: string type: object - setFilterState: - properties: - onRequestHeaders: - items: - properties: - factoryKey: - type: string - formatString: - properties: - contentType: - type: string - formatters: - items: - properties: - name: - type: string - typedConfig: - type: object - x-kubernetes-preserve-unknown-fields: true - type: object - type: array - jsonFormat: - type: object - x-kubernetes-preserve-unknown-fields: true - jsonFormatOptions: - properties: - sortProperties: - type: boolean - type: object - omitEmptyValues: - type: boolean - textFormat: - type: string - textFormatSource: - properties: - filename: - type: string - inlineBytes: - format: byte - type: string - inlineString: - type: string - type: object - type: object - objectKey: - type: string - readOnly: - type: boolean - sharedWithUpstream: - type: string - x-kubernetes-int-or-string: true - skipIfEmpty: - type: boolean - type: object - type: array - type: object stagedTransformations: properties: early: @@ -4977,62 +4921,6 @@ spec: retryOn: type: string type: object - setFilterState: - properties: - onRequestHeaders: - items: - properties: - factoryKey: - type: string - formatString: - properties: - contentType: - type: string - formatters: - items: - properties: - name: - type: string - typedConfig: - type: object - x-kubernetes-preserve-unknown-fields: true - type: object - type: array - jsonFormat: - type: object - x-kubernetes-preserve-unknown-fields: true - jsonFormatOptions: - properties: - sortProperties: - type: boolean - type: object - omitEmptyValues: - type: boolean - textFormat: - type: string - textFormatSource: - properties: - filename: - type: string - inlineBytes: - format: byte - type: string - inlineString: - type: string - type: object - type: object - objectKey: - type: string - readOnly: - type: boolean - sharedWithUpstream: - type: string - x-kubernetes-int-or-string: true - skipIfEmpty: - type: boolean - type: object - type: array - type: object shadowing: properties: percentage: diff --git a/projects/gloo/api/v1/route_options.proto b/projects/gloo/api/v1/route_options.proto index 36bd8c042f1..a7c7f0191f3 100644 --- a/projects/gloo/api/v1/route_options.proto +++ b/projects/gloo/api/v1/route_options.proto @@ -252,7 +252,4 @@ message RouteOptions { // Enterprise-only: Settings to configure ai settings for a route. // These settings will only apply if the backend is an `ai` Upstream. ai.options.gloo.solo.io.RouteSettings ai = 31; - - // Settings to configure set-filter-state settings for a route. - set_filter_state.options.gloo.solo.io.SetFilterState set_filter_state = 33; } \ No newline at end of file diff --git a/projects/gloo/api/v1/virtual_host_options.proto b/projects/gloo/api/v1/virtual_host_options.proto index 9a5fc2b32a8..a29215ee954 100644 --- a/projects/gloo/api/v1/virtual_host_options.proto +++ b/projects/gloo/api/v1/virtual_host_options.proto @@ -158,8 +158,4 @@ message VirtualHostOptions { // Settings for determining merge strategy for CORS settings when present at both Route and VirtualHost levels. cors.options.gloo.solo.io.CorsPolicyMergeSettings cors_policy_merge_settings = 20; - - // SetFilterState can be used to set filter state on the request. - // For more, see https://www.envoyproxy.io/docs/envoy/latest/api-v2/config/filter/http/set_filter_state/v2/set_filter_state.proto - set_filter_state.options.gloo.solo.io.SetFilterState set_filter_state = 21; } \ No newline at end of file diff --git a/projects/gloo/pkg/api/v1/route_options.pb.clone.go b/projects/gloo/pkg/api/v1/route_options.pb.clone.go index 8254dada688..eb0fce0515e 100644 --- a/projects/gloo/pkg/api/v1/route_options.pb.clone.go +++ b/projects/gloo/pkg/api/v1/route_options.pb.clone.go @@ -47,8 +47,6 @@ import ( github_com_solo_io_gloo_projects_gloo_pkg_api_v1_options_retries "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/retries" - github_com_solo_io_gloo_projects_gloo_pkg_api_v1_options_set_filter_state "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/set_filter_state" - github_com_solo_io_gloo_projects_gloo_pkg_api_v1_options_shadowing "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/shadowing" github_com_solo_io_gloo_projects_gloo_pkg_api_v1_options_tracing "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/tracing" @@ -257,12 +255,6 @@ func (m *RouteOptions) Clone() proto.Message { target.Ai = proto.Clone(m.GetAi()).(*github_com_solo_io_gloo_projects_gloo_pkg_api_v1_enterprise_options_ai.RouteSettings) } - if h, ok := interface{}(m.GetSetFilterState()).(clone.Cloner); ok { - target.SetFilterState = h.Clone().(*github_com_solo_io_gloo_projects_gloo_pkg_api_v1_options_set_filter_state.SetFilterState) - } else { - target.SetFilterState = proto.Clone(m.GetSetFilterState()).(*github_com_solo_io_gloo_projects_gloo_pkg_api_v1_options_set_filter_state.SetFilterState) - } - switch m.HostRewriteType.(type) { case *RouteOptions_HostRewrite: diff --git a/projects/gloo/pkg/api/v1/route_options.pb.equal.go b/projects/gloo/pkg/api/v1/route_options.pb.equal.go index e786be331d1..0799b58adc0 100644 --- a/projects/gloo/pkg/api/v1/route_options.pb.equal.go +++ b/projects/gloo/pkg/api/v1/route_options.pb.equal.go @@ -330,16 +330,6 @@ func (m *RouteOptions) Equal(that interface{}) bool { } } - if h, ok := interface{}(m.GetSetFilterState()).(equality.Equalizer); ok { - if !h.Equal(target.GetSetFilterState()) { - return false - } - } else { - if !proto.Equal(m.GetSetFilterState(), target.GetSetFilterState()) { - return false - } - } - switch m.HostRewriteType.(type) { case *RouteOptions_HostRewrite: diff --git a/projects/gloo/pkg/api/v1/route_options.pb.go b/projects/gloo/pkg/api/v1/route_options.pb.go index 8dbaafd90d0..cdef0d142a2 100644 --- a/projects/gloo/pkg/api/v1/route_options.pb.go +++ b/projects/gloo/pkg/api/v1/route_options.pb.go @@ -28,7 +28,7 @@ import ( lbhash "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/lbhash" protocol_upgrade "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/protocol_upgrade" retries "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/retries" - set_filter_state "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/set_filter_state" + _ "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/set_filter_state" shadowing "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/shadowing" tracing "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/tracing" transformation "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/transformation" @@ -175,11 +175,9 @@ type RouteOptions struct { ExtProc *extproc.RouteSettings `protobuf:"bytes,30,opt,name=ext_proc,json=extProc,proto3" json:"ext_proc,omitempty"` // Enterprise-only: Settings to configure ai settings for a route. // These settings will only apply if the backend is an `ai` Upstream. - Ai *ai.RouteSettings `protobuf:"bytes,31,opt,name=ai,proto3" json:"ai,omitempty"` - // Settings to configure set-filter-state settings for a route. - SetFilterState *set_filter_state.SetFilterState `protobuf:"bytes,33,opt,name=set_filter_state,json=setFilterState,proto3" json:"set_filter_state,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + Ai *ai.RouteSettings `protobuf:"bytes,31,opt,name=ai,proto3" json:"ai,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RouteOptions) Reset() { @@ -555,13 +553,6 @@ func (x *RouteOptions) GetAi() *ai.RouteSettings { return nil } -func (x *RouteOptions) GetSetFilterState() *set_filter_state.SetFilterState { - if x != nil { - return x.SetFilterState - } - return nil -} - type isRouteOptions_HostRewriteType interface { isRouteOptions_HostRewriteType() } @@ -917,7 +908,7 @@ var file_github_com_solo_io_gloo_projects_gloo_api_v1_route_options_proto_rawDes 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, - 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x99, 0x1e, 0x0a, 0x0c, 0x52, 0x6f, 0x75, 0x74, + 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xb8, 0x1d, 0x0a, 0x0c, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x62, 0x0a, 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, @@ -1122,48 +1113,42 @@ var file_github_com_solo_io_gloo_projects_gloo_api_v1_route_options_proto_rawDes 0x74, 0x50, 0x72, 0x6f, 0x63, 0x12, 0x36, 0x0a, 0x02, 0x61, 0x69, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x69, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x52, 0x6f, 0x75, 0x74, - 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x02, 0x61, 0x69, 0x12, 0x5f, 0x0a, - 0x10, 0x73, 0x65, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x18, 0x21, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x73, 0x65, 0x74, 0x5f, 0x66, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, - 0x53, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0e, - 0x73, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x1a, 0x59, - 0x0a, 0x12, 0x45, 0x6e, 0x76, 0x6f, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x88, 0x02, 0x0a, 0x11, 0x4d, 0x61, - 0x78, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x49, 0x0a, 0x13, 0x6d, 0x61, 0x78, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x64, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x6d, 0x61, 0x78, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x50, 0x0a, 0x17, 0x67, 0x72, - 0x70, 0x63, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, + 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x02, 0x61, 0x69, 0x1a, 0x59, 0x0a, + 0x12, 0x45, 0x6e, 0x76, 0x6f, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x88, 0x02, 0x0a, 0x11, 0x4d, 0x61, 0x78, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x49, + 0x0a, 0x13, 0x6d, 0x61, 0x78, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x64, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x14, 0x67, 0x72, 0x70, 0x63, 0x54, 0x69, 0x6d, 0x65, - 0x6f, 0x75, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x61, 0x78, 0x12, 0x56, 0x0a, 0x1a, - 0x67, 0x72, 0x70, 0x63, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x68, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x17, 0x67, 0x72, 0x70, - 0x63, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x66, - 0x66, 0x73, 0x65, 0x74, 0x42, 0x13, 0x0a, 0x11, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x77, - 0x72, 0x69, 0x74, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x42, 0x1e, 0x0a, 0x1c, 0x72, 0x61, 0x74, - 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x65, 0x61, 0x72, 0x6c, 0x79, 0x5f, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x42, 0x18, 0x0a, 0x16, 0x72, 0x61, 0x74, - 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x42, 0x20, 0x0a, 0x1e, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, - 0x74, 0x5f, 0x72, 0x65, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x42, 0x0c, 0x0a, 0x0a, 0x6a, 0x77, 0x74, 0x5f, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x42, 0x3e, 0xb8, 0xf5, 0x04, 0x01, 0xc0, 0xf5, 0x04, 0x01, 0xd0, 0xf5, 0x04, - 0x01, 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x6f, - 0x6c, 0x6f, 0x2d, 0x69, 0x6f, 0x2f, 0x67, 0x6c, 0x6f, 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x73, 0x2f, 0x67, 0x6c, 0x6f, 0x6f, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x6d, 0x61, 0x78, 0x53, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x50, 0x0a, 0x17, 0x67, 0x72, 0x70, + 0x63, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x14, 0x67, 0x72, 0x70, 0x63, 0x54, 0x69, 0x6d, 0x65, 0x6f, + 0x75, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x61, 0x78, 0x12, 0x56, 0x0a, 0x1a, 0x67, + 0x72, 0x70, 0x63, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x17, 0x67, 0x72, 0x70, 0x63, + 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x66, 0x66, + 0x73, 0x65, 0x74, 0x42, 0x13, 0x0a, 0x11, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x77, 0x72, + 0x69, 0x74, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x42, 0x1e, 0x0a, 0x1c, 0x72, 0x61, 0x74, 0x65, + 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x65, 0x61, 0x72, 0x6c, 0x79, 0x5f, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x42, 0x18, 0x0a, 0x16, 0x72, 0x61, 0x74, 0x65, + 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x74, 0x79, + 0x70, 0x65, 0x42, 0x20, 0x0a, 0x1e, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, + 0x5f, 0x72, 0x65, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, + 0x74, 0x79, 0x70, 0x65, 0x42, 0x0c, 0x0a, 0x0a, 0x6a, 0x77, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x42, 0x3e, 0xb8, 0xf5, 0x04, 0x01, 0xc0, 0xf5, 0x04, 0x01, 0xd0, 0xf5, 0x04, 0x01, + 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x6f, 0x6c, + 0x6f, 0x2d, 0x69, 0x6f, 0x2f, 0x67, 0x6c, 0x6f, 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x73, 0x2f, 0x67, 0x6c, 0x6f, 0x6f, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, }) var ( @@ -1212,8 +1197,7 @@ var file_github_com_solo_io_gloo_projects_gloo_api_v1_route_options_proto_goType (*transformation.TransformationStages)(nil), // 29: transformation.options.gloo.solo.io.TransformationStages (*extproc.RouteSettings)(nil), // 30: extproc.options.gloo.solo.io.RouteSettings (*ai.RouteSettings)(nil), // 31: ai.options.gloo.solo.io.RouteSettings - (*set_filter_state.SetFilterState)(nil), // 32: set_filter_state.options.gloo.solo.io.SetFilterState - (*structpb.Struct)(nil), // 33: google.protobuf.Struct + (*structpb.Struct)(nil), // 32: google.protobuf.Struct } var file_github_com_solo_io_gloo_projects_gloo_api_v1_route_options_proto_depIdxs = []int32{ 3, // 0: gloo.solo.io.RouteOptions.transformations:type_name -> transformation.options.gloo.solo.io.Transformations @@ -1255,16 +1239,15 @@ var file_github_com_solo_io_gloo_projects_gloo_api_v1_route_options_proto_depIdx 6, // 36: gloo.solo.io.RouteOptions.idle_timeout:type_name -> google.protobuf.Duration 30, // 37: gloo.solo.io.RouteOptions.ext_proc:type_name -> extproc.options.gloo.solo.io.RouteSettings 31, // 38: gloo.solo.io.RouteOptions.ai:type_name -> ai.options.gloo.solo.io.RouteSettings - 32, // 39: gloo.solo.io.RouteOptions.set_filter_state:type_name -> set_filter_state.options.gloo.solo.io.SetFilterState - 33, // 40: gloo.solo.io.RouteOptions.EnvoyMetadataEntry.value:type_name -> google.protobuf.Struct - 6, // 41: gloo.solo.io.RouteOptions.MaxStreamDuration.max_stream_duration:type_name -> google.protobuf.Duration - 6, // 42: gloo.solo.io.RouteOptions.MaxStreamDuration.grpc_timeout_header_max:type_name -> google.protobuf.Duration - 6, // 43: gloo.solo.io.RouteOptions.MaxStreamDuration.grpc_timeout_header_offset:type_name -> google.protobuf.Duration - 44, // [44:44] is the sub-list for method output_type - 44, // [44:44] is the sub-list for method input_type - 44, // [44:44] is the sub-list for extension type_name - 44, // [44:44] is the sub-list for extension extendee - 0, // [0:44] is the sub-list for field type_name + 32, // 39: gloo.solo.io.RouteOptions.EnvoyMetadataEntry.value:type_name -> google.protobuf.Struct + 6, // 40: gloo.solo.io.RouteOptions.MaxStreamDuration.max_stream_duration:type_name -> google.protobuf.Duration + 6, // 41: gloo.solo.io.RouteOptions.MaxStreamDuration.grpc_timeout_header_max:type_name -> google.protobuf.Duration + 6, // 42: gloo.solo.io.RouteOptions.MaxStreamDuration.grpc_timeout_header_offset:type_name -> google.protobuf.Duration + 43, // [43:43] is the sub-list for method output_type + 43, // [43:43] is the sub-list for method input_type + 43, // [43:43] is the sub-list for extension type_name + 43, // [43:43] is the sub-list for extension extendee + 0, // [0:43] is the sub-list for field type_name } func init() { file_github_com_solo_io_gloo_projects_gloo_api_v1_route_options_proto_init() } diff --git a/projects/gloo/pkg/api/v1/route_options.pb.hash.go b/projects/gloo/pkg/api/v1/route_options.pb.hash.go index 7fa85db5863..eef37287e71 100644 --- a/projects/gloo/pkg/api/v1/route_options.pb.hash.go +++ b/projects/gloo/pkg/api/v1/route_options.pb.hash.go @@ -605,26 +605,6 @@ func (m *RouteOptions) Hash(hasher hash.Hash64) (uint64, error) { } } - if h, ok := interface{}(m.GetSetFilterState()).(safe_hasher.SafeHasher); ok { - if _, err = hasher.Write([]byte("SetFilterState")); err != nil { - return 0, err - } - if _, err = h.Hash(hasher); err != nil { - return 0, err - } - } else { - if fieldValue, err := hashstructure.Hash(m.GetSetFilterState(), nil); err != nil { - return 0, err - } else { - if _, err = hasher.Write([]byte("SetFilterState")); err != nil { - return 0, err - } - if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { - return 0, err - } - } - } - switch m.HostRewriteType.(type) { case *RouteOptions_HostRewrite: diff --git a/projects/gloo/pkg/api/v1/route_options.pb.uniquehash.go b/projects/gloo/pkg/api/v1/route_options.pb.uniquehash.go index a3702a20c34..c3eeab5acb6 100644 --- a/projects/gloo/pkg/api/v1/route_options.pb.uniquehash.go +++ b/projects/gloo/pkg/api/v1/route_options.pb.uniquehash.go @@ -615,26 +615,6 @@ func (m *RouteOptions) HashUnique(hasher hash.Hash64) (uint64, error) { } } - if h, ok := interface{}(m.GetSetFilterState()).(safe_hasher.SafeHasher); ok { - if _, err = hasher.Write([]byte("SetFilterState")); err != nil { - return 0, err - } - if _, err = h.Hash(hasher); err != nil { - return 0, err - } - } else { - if fieldValue, err := hashstructure.Hash(m.GetSetFilterState(), nil); err != nil { - return 0, err - } else { - if _, err = hasher.Write([]byte("SetFilterState")); err != nil { - return 0, err - } - if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { - return 0, err - } - } - } - switch m.HostRewriteType.(type) { case *RouteOptions_HostRewrite: diff --git a/projects/gloo/pkg/api/v1/virtual_host_options.pb.clone.go b/projects/gloo/pkg/api/v1/virtual_host_options.pb.clone.go index fc44ca93e67..ad493eb8650 100644 --- a/projects/gloo/pkg/api/v1/virtual_host_options.pb.clone.go +++ b/projects/gloo/pkg/api/v1/virtual_host_options.pb.clone.go @@ -37,8 +37,6 @@ import ( github_com_solo_io_gloo_projects_gloo_pkg_api_v1_options_retries "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/retries" - github_com_solo_io_gloo_projects_gloo_pkg_api_v1_options_set_filter_state "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/set_filter_state" - github_com_solo_io_gloo_projects_gloo_pkg_api_v1_options_stats "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/stats" github_com_solo_io_gloo_projects_gloo_pkg_api_v1_options_transformation "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/transformation" @@ -173,12 +171,6 @@ func (m *VirtualHostOptions) Clone() proto.Message { target.CorsPolicyMergeSettings = proto.Clone(m.GetCorsPolicyMergeSettings()).(*github_com_solo_io_gloo_projects_gloo_pkg_api_v1_options_cors.CorsPolicyMergeSettings) } - if h, ok := interface{}(m.GetSetFilterState()).(clone.Cloner); ok { - target.SetFilterState = h.Clone().(*github_com_solo_io_gloo_projects_gloo_pkg_api_v1_options_set_filter_state.SetFilterState) - } else { - target.SetFilterState = proto.Clone(m.GetSetFilterState()).(*github_com_solo_io_gloo_projects_gloo_pkg_api_v1_options_set_filter_state.SetFilterState) - } - switch m.RateLimitEarlyConfigType.(type) { case *VirtualHostOptions_RatelimitEarly: diff --git a/projects/gloo/pkg/api/v1/virtual_host_options.pb.equal.go b/projects/gloo/pkg/api/v1/virtual_host_options.pb.equal.go index 5875157df34..0a034061dea 100644 --- a/projects/gloo/pkg/api/v1/virtual_host_options.pb.equal.go +++ b/projects/gloo/pkg/api/v1/virtual_host_options.pb.equal.go @@ -226,16 +226,6 @@ func (m *VirtualHostOptions) Equal(that interface{}) bool { } } - if h, ok := interface{}(m.GetSetFilterState()).(equality.Equalizer); ok { - if !h.Equal(target.GetSetFilterState()) { - return false - } - } else { - if !proto.Equal(m.GetSetFilterState(), target.GetSetFilterState()) { - return false - } - } - switch m.RateLimitEarlyConfigType.(type) { case *VirtualHostOptions_RatelimitEarly: diff --git a/projects/gloo/pkg/api/v1/virtual_host_options.pb.go b/projects/gloo/pkg/api/v1/virtual_host_options.pb.go index c3eea941f62..004eeae5cf9 100644 --- a/projects/gloo/pkg/api/v1/virtual_host_options.pb.go +++ b/projects/gloo/pkg/api/v1/virtual_host_options.pb.go @@ -23,7 +23,7 @@ import ( cors "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/cors" headers "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/headers" retries "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/retries" - set_filter_state "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/set_filter_state" + _ "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/set_filter_state" stats "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/stats" transformation "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/transformation" _ "github.com/solo-io/protoc-gen-ext/extproto" @@ -131,11 +131,8 @@ type VirtualHostOptions struct { ExtProc *extproc.RouteSettings `protobuf:"bytes,30,opt,name=ext_proc,json=extProc,proto3" json:"ext_proc,omitempty"` // Settings for determining merge strategy for CORS settings when present at both Route and VirtualHost levels. CorsPolicyMergeSettings *cors.CorsPolicyMergeSettings `protobuf:"bytes,20,opt,name=cors_policy_merge_settings,json=corsPolicyMergeSettings,proto3" json:"cors_policy_merge_settings,omitempty"` - // SetFilterState can be used to set filter state on the request. - // For more, see https://www.envoyproxy.io/docs/envoy/latest/api-v2/config/filter/http/set_filter_state/v2/set_filter_state.proto - SetFilterState *set_filter_state.SetFilterState `protobuf:"bytes,21,opt,name=set_filter_state,json=setFilterState,proto3" json:"set_filter_state,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *VirtualHostOptions) Reset() { @@ -396,13 +393,6 @@ func (x *VirtualHostOptions) GetCorsPolicyMergeSettings() *cors.CorsPolicyMergeS return nil } -func (x *VirtualHostOptions) GetSetFilterState() *set_filter_state.SetFilterState { - if x != nil { - return x.SetFilterState - } - return nil -} - type isVirtualHostOptions_RateLimitEarlyConfigType interface { isVirtualHostOptions_RateLimitEarlyConfigType() } @@ -600,7 +590,7 @@ var file_github_com_solo_io_gloo_projects_gloo_api_v1_virtual_host_options_proto 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x22, 0x93, 0x13, 0x0a, 0x12, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x48, 0x6f, 0x73, 0x74, + 0x22, 0xb2, 0x12, 0x0a, 0x12, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x48, 0x6f, 0x73, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x38, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, @@ -740,24 +730,18 @@ var file_github_com_solo_io_gloo_projects_gloo_api_v1_virtual_host_options_proto 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x43, 0x6f, 0x72, 0x73, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x17, 0x63, 0x6f, 0x72, 0x73, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4d, 0x65, - 0x72, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x5f, 0x0a, 0x10, 0x73, - 0x65, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, - 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x73, 0x65, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x67, 0x6c, 0x6f, 0x6f, 0x2e, 0x73, 0x6f, 0x6c, 0x6f, 0x2e, 0x69, 0x6f, 0x2e, 0x53, 0x65, - 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0e, 0x73, 0x65, - 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x42, 0x1e, 0x0a, 0x1c, - 0x72, 0x61, 0x74, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x65, 0x61, 0x72, 0x6c, 0x79, - 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x42, 0x18, 0x0a, 0x16, - 0x72, 0x61, 0x74, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x42, 0x20, 0x0a, 0x1e, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x6c, - 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x42, 0x0c, 0x0a, 0x0a, 0x6a, 0x77, 0x74, 0x5f, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x3e, 0xb8, 0xf5, 0x04, 0x01, 0xc0, 0xf5, 0x04, 0x01, - 0xd0, 0xf5, 0x04, 0x01, 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x73, 0x6f, 0x6c, 0x6f, 0x2d, 0x69, 0x6f, 0x2f, 0x67, 0x6c, 0x6f, 0x6f, 0x2f, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x67, 0x6c, 0x6f, 0x6f, 0x2f, 0x70, 0x6b, 0x67, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x72, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x42, 0x1e, 0x0a, 0x1c, 0x72, + 0x61, 0x74, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x65, 0x61, 0x72, 0x6c, 0x79, 0x5f, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x42, 0x18, 0x0a, 0x16, 0x72, + 0x61, 0x74, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x5f, 0x74, 0x79, 0x70, 0x65, 0x42, 0x20, 0x0a, 0x1e, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x6c, 0x69, + 0x6d, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x42, 0x0c, 0x0a, 0x0a, 0x6a, 0x77, 0x74, 0x5f, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x3e, 0xb8, 0xf5, 0x04, 0x01, 0xc0, 0xf5, 0x04, 0x01, 0xd0, + 0xf5, 0x04, 0x01, 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x73, 0x6f, 0x6c, 0x6f, 0x2d, 0x69, 0x6f, 0x2f, 0x67, 0x6c, 0x6f, 0x6f, 0x2f, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x67, 0x6c, 0x6f, 0x6f, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, }) var ( @@ -796,7 +780,6 @@ var file_github_com_solo_io_gloo_projects_gloo_api_v1_virtual_host_options_proto (*transformation.TransformationStages)(nil), // 19: transformation.options.gloo.solo.io.TransformationStages (*extproc.RouteSettings)(nil), // 20: extproc.options.gloo.solo.io.RouteSettings (*cors.CorsPolicyMergeSettings)(nil), // 21: cors.options.gloo.solo.io.CorsPolicyMergeSettings - (*set_filter_state.SetFilterState)(nil), // 22: set_filter_state.options.gloo.solo.io.SetFilterState } var file_github_com_solo_io_gloo_projects_gloo_api_v1_virtual_host_options_proto_depIdxs = []int32{ 1, // 0: gloo.solo.io.VirtualHostOptions.extensions:type_name -> gloo.solo.io.Extensions @@ -825,12 +808,11 @@ var file_github_com_solo_io_gloo_projects_gloo_api_v1_virtual_host_options_proto 19, // 23: gloo.solo.io.VirtualHostOptions.staged_transformations:type_name -> transformation.options.gloo.solo.io.TransformationStages 20, // 24: gloo.solo.io.VirtualHostOptions.ext_proc:type_name -> extproc.options.gloo.solo.io.RouteSettings 21, // 25: gloo.solo.io.VirtualHostOptions.cors_policy_merge_settings:type_name -> cors.options.gloo.solo.io.CorsPolicyMergeSettings - 22, // 26: gloo.solo.io.VirtualHostOptions.set_filter_state:type_name -> set_filter_state.options.gloo.solo.io.SetFilterState - 27, // [27:27] is the sub-list for method output_type - 27, // [27:27] is the sub-list for method input_type - 27, // [27:27] is the sub-list for extension type_name - 27, // [27:27] is the sub-list for extension extendee - 0, // [0:27] is the sub-list for field type_name + 26, // [26:26] is the sub-list for method output_type + 26, // [26:26] is the sub-list for method input_type + 26, // [26:26] is the sub-list for extension type_name + 26, // [26:26] is the sub-list for extension extendee + 0, // [0:26] is the sub-list for field type_name } func init() { file_github_com_solo_io_gloo_projects_gloo_api_v1_virtual_host_options_proto_init() } diff --git a/projects/gloo/pkg/api/v1/virtual_host_options.pb.hash.go b/projects/gloo/pkg/api/v1/virtual_host_options.pb.hash.go index 730b293bb01..bae3c82bcdd 100644 --- a/projects/gloo/pkg/api/v1/virtual_host_options.pb.hash.go +++ b/projects/gloo/pkg/api/v1/virtual_host_options.pb.hash.go @@ -402,26 +402,6 @@ func (m *VirtualHostOptions) Hash(hasher hash.Hash64) (uint64, error) { } } - if h, ok := interface{}(m.GetSetFilterState()).(safe_hasher.SafeHasher); ok { - if _, err = hasher.Write([]byte("SetFilterState")); err != nil { - return 0, err - } - if _, err = h.Hash(hasher); err != nil { - return 0, err - } - } else { - if fieldValue, err := hashstructure.Hash(m.GetSetFilterState(), nil); err != nil { - return 0, err - } else { - if _, err = hasher.Write([]byte("SetFilterState")); err != nil { - return 0, err - } - if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { - return 0, err - } - } - } - switch m.RateLimitEarlyConfigType.(type) { case *VirtualHostOptions_RatelimitEarly: diff --git a/projects/gloo/pkg/api/v1/virtual_host_options.pb.uniquehash.go b/projects/gloo/pkg/api/v1/virtual_host_options.pb.uniquehash.go index 654f683aca4..403589c6c8f 100644 --- a/projects/gloo/pkg/api/v1/virtual_host_options.pb.uniquehash.go +++ b/projects/gloo/pkg/api/v1/virtual_host_options.pb.uniquehash.go @@ -403,26 +403,6 @@ func (m *VirtualHostOptions) HashUnique(hasher hash.Hash64) (uint64, error) { } } - if h, ok := interface{}(m.GetSetFilterState()).(safe_hasher.SafeHasher); ok { - if _, err = hasher.Write([]byte("SetFilterState")); err != nil { - return 0, err - } - if _, err = h.Hash(hasher); err != nil { - return 0, err - } - } else { - if fieldValue, err := hashstructure.Hash(m.GetSetFilterState(), nil); err != nil { - return 0, err - } else { - if _, err = hasher.Write([]byte("SetFilterState")); err != nil { - return 0, err - } - if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { - return 0, err - } - } - } - switch m.RateLimitEarlyConfigType.(type) { case *VirtualHostOptions_RatelimitEarly: diff --git a/projects/gloo/pkg/plugins/set_filter_state/plugin.go b/projects/gloo/pkg/plugins/set_filter_state/plugin.go index afb67f05399..9a82a1301cf 100644 --- a/projects/gloo/pkg/plugins/set_filter_state/plugin.go +++ b/projects/gloo/pkg/plugins/set_filter_state/plugin.go @@ -48,7 +48,7 @@ func (p *plugin) HttpFilters(params plugins.Params, listener *v1.HttpListener) ( return nil, nil } - filter, err := translateFilter(cfg) + filter, err := TranslateFilter(cfg) if err != nil { return nil, err } @@ -86,7 +86,7 @@ func (p *plugin) HttpFilters(params plugins.Params, listener *v1.HttpListener) ( // ) // } -func translateFilter(cfg *set_filter_state.SetFilterState) (*http_set_filter_state_v3.Config, error) { +func TranslateFilter(cfg *set_filter_state.SetFilterState) (*http_set_filter_state_v3.Config, error) { onRequestHeaders := cfg.GetOnRequestHeaders() if onRequestHeaders == nil { diff --git a/projects/gloo/pkg/plugins/set_filter_state/plugin_test.go b/projects/gloo/pkg/plugins/set_filter_state/plugin_test.go index f5204bdb545..d54f5338cd4 100644 --- a/projects/gloo/pkg/plugins/set_filter_state/plugin_test.go +++ b/projects/gloo/pkg/plugins/set_filter_state/plugin_test.go @@ -4,7 +4,6 @@ import ( http_set_filter_state_v3 "github.com/envoyproxy/go-control-plane/envoy/extensions/filters/http/set_filter_state/v3" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" - v1 "github.com/solo-io/gloo/projects/gloo/pkg/api/v1" "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/set_filter_state" . "github.com/solo-io/gloo/projects/gloo/pkg/plugins/set_filter_state" ) @@ -18,37 +17,33 @@ var testCases = []testCase{ {}, } - - - var _ = Describe("SetFilterState Plugin", func() { Context("Translation", func() { for _, testCase := range testCases { - Context("OnRequestHeaders", func() { - var ( - input *set_filter_state.SetFilterState - ) + It("Translates the filter state", func() { + Expect(TranslateFilter(testCase.input)).To(Equal(testCase.output)) }) } - var () + // var () - BeforeEach(func() { + // BeforeEach(func() { - }) + // }) - Context("HttpFilters", func() { - var listener *v1.HttpListener + // Context("HttpFilters", func() { + // var listener *v1.HttpListener - BeforeEach(func() { - listener = &v1.HttpListener{} - }) + // BeforeEach(func() { + // listener = &v1.HttpListener{} + // }) - It("should return no filters if no config is provided", func() { - filters, err := p.HttpFilters(params, listener) - Expect(err).NotTo(HaveOccurred()) - Expect(filters).To(BeEmpty()) - }) + // It("should return no filters if no config is provided", func() { + // filters, err := p.HttpFilters(params, listener) + // Expect(err).NotTo(HaveOccurred()) + // Expect(filters).To(BeEmpty()) + // }) + // }) }) })