diff --git a/Makefile b/Makefile index 39263e8c..fb11ede1 100644 --- a/Makefile +++ b/Makefile @@ -70,7 +70,7 @@ tunnel-deps: tunnelrpc/tunnelrpc.capnp.go tunnelrpc/tunnelrpc.capnp.go: tunnelrpc/tunnelrpc.capnp which capnp # https://capnproto.org/install.html which capnpc-go # go get zombiezen.com/go/capnproto2/capnpc-go - capnp compile -ogo -I ./tunnelrpc tunnelrpc/tunnelrpc.capnp + capnp compile -ogo tunnelrpc/tunnelrpc.capnp .PHONY: vet vet: diff --git a/tunnelrpc/pogs/config.go b/tunnelrpc/pogs/config.go index 945ed66f..0808bd29 100644 --- a/tunnelrpc/pogs/config.go +++ b/tunnelrpc/pogs/config.go @@ -15,8 +15,8 @@ import ( /// Structs /// -type CloudflaredConfig struct { - Timestamp time.Time +type ClientConfig struct { + Version uint64 AutoUpdateFrequency time.Duration MetricsUpdateFrequency time.Duration HeartbeatInterval time.Duration @@ -24,6 +24,7 @@ type CloudflaredConfig struct { GracePeriod time.Duration DoHProxyConfigs []*DoHProxyConfig ReverseProxyConfigs []*ReverseProxyConfig + NumHAConnections uint8 } type UseConfigurationResult struct { @@ -38,7 +39,7 @@ type DoHProxyConfig struct { } type ReverseProxyConfig struct { - TunnelID string + TunnelHostname string Origin OriginConfig Retries uint64 ConnectionTimeout time.Duration @@ -46,6 +47,27 @@ type ReverseProxyConfig struct { CompressionQuality uint64 } +func NewReverseProxyConfig( + tunnelHostname string, + originConfig OriginConfig, + retries uint64, + connectionTimeout time.Duration, + chunkedEncoding bool, + compressionQuality uint64, +) (*ReverseProxyConfig, error) { + if originConfig == nil { + return nil, fmt.Errorf("NewReverseProxyConfig: originConfig was null") + } + return &ReverseProxyConfig{ + TunnelHostname: tunnelHostname, + Origin: originConfig, + Retries: retries, + ConnectionTimeout: connectionTimeout, + ChunkedEncoding: chunkedEncoding, + CompressionQuality: compressionQuality, + }, nil +} + //go-sumtype:decl OriginConfig type OriginConfig interface { isOriginConfig() @@ -81,29 +103,31 @@ type HelloWorldOriginConfig struct{} func (_ *HelloWorldOriginConfig) isOriginConfig() {} -/// -/// Boilerplate to convert between these structs and the primitive structs generated by capnp-go -/// +/* + * Boilerplate to convert between these structs and the primitive structs + * generated by capnp-go. + * Mnemonics for variable names in this section: + * - `p` is for POGS (plain old Go struct) + * - `s` (and `ss`) is for "capnp.Struct", which is the fundamental type + * underlying the capnp-go data structures. + */ -func MarshalCloudflaredConfig(s tunnelrpc.CloudflaredConfig, p *CloudflaredConfig) error { - s.SetTimestamp(p.Timestamp.UnixNano()) +func MarshalClientConfig(s tunnelrpc.ClientConfig, p *ClientConfig) error { + s.SetVersion(p.Version) s.SetAutoUpdateFrequency(p.AutoUpdateFrequency.Nanoseconds()) s.SetMetricsUpdateFrequency(p.MetricsUpdateFrequency.Nanoseconds()) s.SetHeartbeatInterval(p.HeartbeatInterval.Nanoseconds()) s.SetMaxFailedHeartbeats(p.MaxFailedHeartbeats) s.SetGracePeriod(p.GracePeriod.Nanoseconds()) + s.SetNumHAConnections(p.NumHAConnections) err := marshalDoHProxyConfigs(s, p.DoHProxyConfigs) if err != nil { return err } - err = marshalReverseProxyConfigs(s, p.ReverseProxyConfigs) - if err != nil { - return err - } - return nil + return marshalReverseProxyConfigs(s, p.ReverseProxyConfigs) } -func marshalDoHProxyConfigs(s tunnelrpc.CloudflaredConfig, dohProxyConfigs []*DoHProxyConfig) error { +func marshalDoHProxyConfigs(s tunnelrpc.ClientConfig, dohProxyConfigs []*DoHProxyConfig) error { capnpList, err := s.NewDohProxyConfigs(int32(len(dohProxyConfigs))) if err != nil { return err @@ -117,7 +141,7 @@ func marshalDoHProxyConfigs(s tunnelrpc.CloudflaredConfig, dohProxyConfigs []*Do return nil } -func marshalReverseProxyConfigs(s tunnelrpc.CloudflaredConfig, reverseProxyConfigs []*ReverseProxyConfig) error { +func marshalReverseProxyConfigs(s tunnelrpc.ClientConfig, reverseProxyConfigs []*ReverseProxyConfig) error { capnpList, err := s.NewReverseProxyConfigs(int32(len(reverseProxyConfigs))) if err != nil { return err @@ -131,14 +155,15 @@ func marshalReverseProxyConfigs(s tunnelrpc.CloudflaredConfig, reverseProxyConfi return nil } -func UnmarshalCloudflaredConfig(s tunnelrpc.CloudflaredConfig) (*CloudflaredConfig, error) { - p := new(CloudflaredConfig) - p.Timestamp = time.Unix(0, s.Timestamp()).UTC() +func UnmarshalClientConfig(s tunnelrpc.ClientConfig) (*ClientConfig, error) { + p := new(ClientConfig) + p.Version = s.Version() p.AutoUpdateFrequency = time.Duration(s.AutoUpdateFrequency()) p.MetricsUpdateFrequency = time.Duration(s.MetricsUpdateFrequency()) p.HeartbeatInterval = time.Duration(s.HeartbeatInterval()) p.MaxFailedHeartbeats = s.MaxFailedHeartbeats() p.GracePeriod = time.Duration(s.GracePeriod()) + p.NumHAConnections = s.NumHAConnections() dohProxyConfigs, err := unmarshalDoHProxyConfigs(s) if err != nil { return nil, err @@ -152,7 +177,7 @@ func UnmarshalCloudflaredConfig(s tunnelrpc.CloudflaredConfig) (*CloudflaredConf return p, err } -func unmarshalDoHProxyConfigs(s tunnelrpc.CloudflaredConfig) ([]*DoHProxyConfig, error) { +func unmarshalDoHProxyConfigs(s tunnelrpc.ClientConfig) ([]*DoHProxyConfig, error) { var result []*DoHProxyConfig marshalledDoHProxyConfigs, err := s.DohProxyConfigs() if err != nil { @@ -169,7 +194,7 @@ func unmarshalDoHProxyConfigs(s tunnelrpc.CloudflaredConfig) ([]*DoHProxyConfig, return result, nil } -func unmarshalReverseProxyConfigs(s tunnelrpc.CloudflaredConfig) ([]*ReverseProxyConfig, error) { +func unmarshalReverseProxyConfigs(s tunnelrpc.ClientConfig) ([]*ReverseProxyConfig, error) { var result []*ReverseProxyConfig marshalledReverseProxyConfigs, err := s.ReverseProxyConfigs() if err != nil { @@ -207,7 +232,7 @@ func UnmarshalDoHProxyConfig(s tunnelrpc.DoHProxyConfig) (*DoHProxyConfig, error } func MarshalReverseProxyConfig(s tunnelrpc.ReverseProxyConfig, p *ReverseProxyConfig) error { - s.SetTunnelID(p.TunnelID) + s.SetTunnelHostname(p.TunnelHostname) switch config := p.Origin.(type) { case *HTTPOriginConfig: ss, err := s.Origin().NewHttp() @@ -245,11 +270,11 @@ func MarshalReverseProxyConfig(s tunnelrpc.ReverseProxyConfig, p *ReverseProxyCo func UnmarshalReverseProxyConfig(s tunnelrpc.ReverseProxyConfig) (*ReverseProxyConfig, error) { p := new(ReverseProxyConfig) - tunnelID, err := s.TunnelID() + tunnelHostname, err := s.TunnelHostname() if err != nil { return nil, err } - p.TunnelID = tunnelID + p.TunnelHostname = tunnelHostname switch s.Origin().Which() { case tunnelrpc.ReverseProxyConfig_origin_Which_http: ss, err := s.Origin().Http() @@ -339,31 +364,30 @@ func UnmarshalHelloWorldOriginConfig(s tunnelrpc.HelloWorldOriginConfig) (*Hello return p, err } -type CloudflaredServer interface { - UseConfiguration(ctx context.Context, config *CloudflaredConfig) (*CloudflaredConfig, error) - GetConfiguration(ctx context.Context) (*CloudflaredConfig, error) +type ClientService interface { + UseConfiguration(ctx context.Context, config *ClientConfig) (*ClientConfig, error) } -type CloudflaredServer_PogsClient struct { +type ClientService_PogsClient struct { Client capnp.Client Conn *rpc.Conn } -func (c *CloudflaredServer_PogsClient) Close() error { +func (c *ClientService_PogsClient) Close() error { return c.Conn.Close() } -func (c *CloudflaredServer_PogsClient) UseConfiguration( +func (c *ClientService_PogsClient) UseConfiguration( ctx context.Context, - config *CloudflaredConfig, + config *ClientConfig, ) (*UseConfigurationResult, error) { - client := tunnelrpc.CloudflaredServer{Client: c.Client} - promise := client.UseConfiguration(ctx, func(p tunnelrpc.CloudflaredServer_useConfiguration_Params) error { - cloudflaredConfig, err := p.NewCloudflaredConfig() + client := tunnelrpc.ClientService{Client: c.Client} + promise := client.UseConfiguration(ctx, func(p tunnelrpc.ClientService_useConfiguration_Params) error { + clientServiceConfig, err := p.NewClientConfig() if err != nil { return err } - return MarshalCloudflaredConfig(cloudflaredConfig, config) + return MarshalClientConfig(clientServiceConfig, config) }) retval, err := promise.Result().Struct() if err != nil { diff --git a/tunnelrpc/pogs/config_test.go b/tunnelrpc/pogs/config_test.go index b64e2e07..0ed71de7 100644 --- a/tunnelrpc/pogs/config_test.go +++ b/tunnelrpc/pogs/config_test.go @@ -1,6 +1,8 @@ package pogs import ( + "fmt" + "reflect" "testing" "time" @@ -10,15 +12,18 @@ import ( capnp "zombiezen.com/go/capnproto2" ) -func TestCloudflaredConfig(t *testing.T) { - addDoHProxyConfigs := func(c *CloudflaredConfig) { +func TestClientConfig(t *testing.T) { + addDoHProxyConfigs := func(c *ClientConfig) { c.DoHProxyConfigs = []*DoHProxyConfig{ sampleDoHProxyConfig(), } } - addReverseProxyConfigs := func(c *CloudflaredConfig) { + addReverseProxyConfigs := func(c *ClientConfig) { c.ReverseProxyConfigs = []*ReverseProxyConfig{ sampleReverseProxyConfig(), + sampleReverseProxyConfig(func(c *ReverseProxyConfig) { + c.ChunkedEncoding = false + }), sampleReverseProxyConfig(func(c *ReverseProxyConfig) { c.Origin = sampleHTTPOriginConfig() }), @@ -31,23 +36,23 @@ func TestCloudflaredConfig(t *testing.T) { } } - testCases := []*CloudflaredConfig{ - sampleCloudflaredConfig(), - sampleCloudflaredConfig(addDoHProxyConfigs), - sampleCloudflaredConfig(addReverseProxyConfigs), - sampleCloudflaredConfig(addDoHProxyConfigs, addReverseProxyConfigs), + testCases := []*ClientConfig{ + sampleClientConfig(), + sampleClientConfig(addDoHProxyConfigs), + sampleClientConfig(addReverseProxyConfigs), + sampleClientConfig(addDoHProxyConfigs, addReverseProxyConfigs), } for i, testCase := range testCases { _, seg, err := capnp.NewMessage(capnp.SingleSegment(nil)) - capnpEntity, err := tunnelrpc.NewCloudflaredConfig(seg) + capnpEntity, err := tunnelrpc.NewClientConfig(seg) if !assert.NoError(t, err) { t.Fatal("Couldn't initialize a new message") } - err = MarshalCloudflaredConfig(capnpEntity, testCase) + err = MarshalClientConfig(capnpEntity, testCase) if !assert.NoError(t, err, "testCase index %v failed to marshal", i) { continue } - result, err := UnmarshalCloudflaredConfig(capnpEntity) + result, err := UnmarshalClientConfig(capnpEntity) if !assert.NoError(t, err, "testCase index %v failed to unmarshal", i) { continue } @@ -208,18 +213,17 @@ func TestWebSocketOriginConfig(t *testing.T) { ////////////////////////////////////////////////////////////////////////////// // Functions to generate sample data for ease of testing -func sampleCloudflaredConfig(overrides ...func(*CloudflaredConfig)) *CloudflaredConfig { - // strip the location and monotonic clock reading so that assert.Equals() - // will work correctly - now := time.Now().UTC().Round(0) - sample := &CloudflaredConfig{ - Timestamp: now, +func sampleClientConfig(overrides ...func(*ClientConfig)) *ClientConfig { + sample := &ClientConfig{ + Version: uint64(1337), AutoUpdateFrequency: 21 * time.Hour, MetricsUpdateFrequency: 11 * time.Minute, HeartbeatInterval: 5 * time.Second, MaxFailedHeartbeats: 9001, GracePeriod: 31 * time.Second, + NumHAConnections: 49, } + sample.ensureNoZeroFields() for _, f := range overrides { f(sample) } @@ -232,6 +236,7 @@ func sampleDoHProxyConfig(overrides ...func(*DoHProxyConfig)) *DoHProxyConfig { ListenPort: 53, Upstreams: []string{"https://1.example.com", "https://2.example.com"}, } + sample.ensureNoZeroFields() for _, f := range overrides { f(sample) } @@ -240,13 +245,14 @@ func sampleDoHProxyConfig(overrides ...func(*DoHProxyConfig)) *DoHProxyConfig { func sampleReverseProxyConfig(overrides ...func(*ReverseProxyConfig)) *ReverseProxyConfig { sample := &ReverseProxyConfig{ - TunnelID: "hijk", + TunnelHostname: "hijk.example.com", Origin: &HelloWorldOriginConfig{}, Retries: 18, ConnectionTimeout: 5 * time.Second, - ChunkedEncoding: false, + ChunkedEncoding: true, CompressionQuality: 4, } + sample.ensureNoZeroFields() for _, f := range overrides { f(sample) } @@ -265,6 +271,7 @@ func sampleHTTPOriginConfig(overrides ...func(*HTTPOriginConfig)) *HTTPOriginCon MaxIdleConnections: 19, IdleConnectionTimeout: 17 * time.Second, } + sample.ensureNoZeroFields() for _, f := range overrides { f(sample) } @@ -275,6 +282,7 @@ func sampleUnixSocketOriginConfig(overrides ...func(*UnixSocketOriginConfig)) *U sample := &UnixSocketOriginConfig{ Path: "/var/lib/file.sock", } + sample.ensureNoZeroFields() for _, f := range overrides { f(sample) } @@ -285,8 +293,71 @@ func sampleWebSocketOriginConfig(overrides ...func(*WebSocketOriginConfig)) *Web sample := &WebSocketOriginConfig{ URL: "ssh://example.com", } + sample.ensureNoZeroFields() for _, f := range overrides { f(sample) } return sample } + +func (c *ClientConfig) ensureNoZeroFields() { + ensureNoZeroFieldsInSample(reflect.ValueOf(c), []string{"DoHProxyConfigs", "ReverseProxyConfigs"}) +} + +func (c *DoHProxyConfig) ensureNoZeroFields() { + ensureNoZeroFieldsInSample(reflect.ValueOf(c), []string{}) +} + +func (c *ReverseProxyConfig) ensureNoZeroFields() { + ensureNoZeroFieldsInSample(reflect.ValueOf(c), []string{}) +} + +func (c *HTTPOriginConfig) ensureNoZeroFields() { + ensureNoZeroFieldsInSample(reflect.ValueOf(c), []string{}) +} + +func (c *UnixSocketOriginConfig) ensureNoZeroFields() { + ensureNoZeroFieldsInSample(reflect.ValueOf(c), []string{}) +} + +func (c *WebSocketOriginConfig) ensureNoZeroFields() { + ensureNoZeroFieldsInSample(reflect.ValueOf(c), []string{}) +} + +// ensureNoZeroFieldsInSample checks that all fields in the sample struct, +// except those listed in `allowedZeroFieldNames`, are initialized to nonzero +// values. Note that the value has to be a pointer for reflection to work +// correctly: +// e := &ExampleStruct{ ... } +// ensureNoZeroFieldsInSample(reflect.ValueOf(e), []string{}) +// +// Context: +// Our tests work by taking a sample struct and marshalling/unmarshalling it. +// This makes them easy to write, but introduces some risk: if we don't +// include a field in the sample value, it won't be covered under tests. +// This check reduces that risk by requiring fields to be either initialized +// or explicitly uninitialized. +// https://bitbucket.cfdata.org/projects/TUN/repos/cloudflared/pull-requests/151/overview?commentId=348012 +func ensureNoZeroFieldsInSample(ptrToSampleValue reflect.Value, allowedZeroFieldNames []string) { + sampleValue := ptrToSampleValue.Elem() + structType := ptrToSampleValue.Type().Elem() + + allowedZeroFieldSet := make(map[string]bool) + for _, name := range allowedZeroFieldNames { + if _, ok := structType.FieldByName(name); !ok { + panic(fmt.Sprintf("struct %v has no field %v", structType.Name(), name)) + } + allowedZeroFieldSet[name] = true + } + + for i := 0; i < structType.NumField(); i++ { + if allowedZeroFieldSet[structType.Field(i).Name] { + continue + } + + zeroValue := reflect.Zero(structType.Field(i).Type) + if reflect.DeepEqual(zeroValue.Interface(), sampleValue.Field(i).Interface()) { + panic(fmt.Sprintf("In the sample value for struct %v, field %v was not initialized", structType.Name(), structType.Field(i).Name)) + } + } +} diff --git a/tunnelrpc/tunnelrpc.capnp b/tunnelrpc/tunnelrpc.capnp index db9b21a4..382f7102 100644 --- a/tunnelrpc/tunnelrpc.capnp +++ b/tunnelrpc/tunnelrpc.capnp @@ -72,10 +72,11 @@ struct ConnectError { shouldRetry @2 :Bool; } -struct CloudflaredConfig { - # Timestamp (in ns) of this configuration. Any configuration supplied to - # useConfiguration() with an older timestamp should be ignored. - timestamp @0 :Int64; +struct ClientConfig { + # Version of this configuration. This value is opaque, but is guaranteed + # to monotonically increase in value. Any configuration supplied to + # useConfiguration() with a smaller `version` should be ignored. + version @0 :UInt64; # Frequency (in ns) to check Equinox for updates. # Zero means auto-update is disabled. # cloudflared CLI option: `autoupdate-freq` @@ -101,10 +102,14 @@ struct CloudflaredConfig { dohProxyConfigs @6 :List(DoHProxyConfig); # Configuration for cloudflared to run as an HTTP reverse proxy. reverseProxyConfigs @7 :List(ReverseProxyConfig); + # Number of persistent connections to keep open between cloudflared and + # the edge. + # cloudflared CLI option: `ha-connections` + numHAConnections @8 :UInt8; } struct ReverseProxyConfig { - tunnelID @0 :Text; + tunnelHostname @0 :Text; origin :union { http @1 :HTTPOriginConfig; socket @2 :UnixSocketOriginConfig; @@ -230,6 +235,6 @@ interface TunnelServer { connect @3 (parameters :CapnpConnectParameters) -> (result :ConnectResult); } -interface CloudflaredServer { - useConfiguration @0 (cloudflaredConfig :CloudflaredConfig) -> (result :UseConfigurationResult); +interface ClientService { + useConfiguration @0 (clientServiceConfig :ClientConfig) -> (result :UseConfigurationResult); } diff --git a/tunnelrpc/tunnelrpc.capnp.go b/tunnelrpc/tunnelrpc.capnp.go index c1e381d1..714004c4 100644 --- a/tunnelrpc/tunnelrpc.capnp.go +++ b/tunnelrpc/tunnelrpc.capnp.go @@ -3,8 +3,9 @@ package tunnelrpc import ( - context "golang.org/x/net/context" strconv "strconv" + + context "golang.org/x/net/context" capnp "zombiezen.com/go/capnproto2" text "zombiezen.com/go/capnproto2/encoding/text" schemas "zombiezen.com/go/capnproto2/schemas" @@ -106,6 +107,11 @@ func (s Authentication_List) At(i int) Authentication { return Authentication{s. func (s Authentication_List) Set(i int, v Authentication) error { return s.List.SetStruct(i, v.Struct) } +func (s Authentication_List) String() string { + str, _ := text.MarshalList(0xc082ef6e0d42ed1d, s.List) + return str +} + // Authentication_Promise is a wrapper for a Authentication promised by a client call. type Authentication_Promise struct{ *capnp.Pipeline } @@ -246,6 +252,11 @@ func (s TunnelRegistration_List) Set(i int, v TunnelRegistration) error { return s.List.SetStruct(i, v.Struct) } +func (s TunnelRegistration_List) String() string { + str, _ := text.MarshalList(0xf41a0f001ad49e46, s.List) + return str +} + // TunnelRegistration_Promise is a wrapper for a TunnelRegistration promised by a client call. type TunnelRegistration_Promise struct{ *capnp.Pipeline } @@ -475,6 +486,11 @@ func (s RegistrationOptions_List) Set(i int, v RegistrationOptions) error { return s.List.SetStruct(i, v.Struct) } +func (s RegistrationOptions_List) String() string { + str, _ := text.MarshalList(0xc793e50592935b4a, s.List) + return str +} + // RegistrationOptions_Promise is a wrapper for a RegistrationOptions promised by a client call. type RegistrationOptions_Promise struct{ *capnp.Pipeline } @@ -605,6 +621,11 @@ func (s CapnpConnectParameters_List) Set(i int, v CapnpConnectParameters) error return s.List.SetStruct(i, v.Struct) } +func (s CapnpConnectParameters_List) String() string { + str, _ := text.MarshalList(0xa78f37418c1077c8, s.List) + return str +} + // CapnpConnectParameters_Promise is a wrapper for a CapnpConnectParameters promised by a client call. type CapnpConnectParameters_Promise struct{ *capnp.Pipeline } @@ -701,6 +722,11 @@ func (s ConnectResult_List) At(i int) ConnectResult { return ConnectResult{s.Lis func (s ConnectResult_List) Set(i int, v ConnectResult) error { return s.List.SetStruct(i, v.Struct) } +func (s ConnectResult_List) String() string { + str, _ := text.MarshalList(0xff8d9848747c956a, s.List) + return str +} + // ConnectResult_Promise is a wrapper for a ConnectResult promised by a client call. type ConnectResult_Promise struct{ *capnp.Pipeline } @@ -790,6 +816,11 @@ func (s ConnectError_List) At(i int) ConnectError { return ConnectError{s.List.S func (s ConnectError_List) Set(i int, v ConnectError) error { return s.List.SetStruct(i, v.Struct) } +func (s ConnectError_List) String() string { + str, _ := text.MarshalList(0xb14ce48f4e2abb0d, s.List) + return str +} + // ConnectError_Promise is a wrapper for a ConnectError promised by a client call. type ConnectError_Promise struct{ *capnp.Pipeline } @@ -798,96 +829,96 @@ func (p ConnectError_Promise) Struct() (ConnectError, error) { return ConnectError{s}, err } -type CloudflaredConfig struct{ capnp.Struct } +type ClientConfig struct{ capnp.Struct } -// CloudflaredConfig_TypeID is the unique identifier for the type CloudflaredConfig. -const CloudflaredConfig_TypeID = 0x984a5b060f122dd1 +// ClientConfig_TypeID is the unique identifier for the type ClientConfig. +const ClientConfig_TypeID = 0xe84e68c9403d0371 -func NewCloudflaredConfig(s *capnp.Segment) (CloudflaredConfig, error) { - st, err := capnp.NewStruct(s, capnp.ObjectSize{DataSize: 48, PointerCount: 2}) - return CloudflaredConfig{st}, err +func NewClientConfig(s *capnp.Segment) (ClientConfig, error) { + st, err := capnp.NewStruct(s, capnp.ObjectSize{DataSize: 56, PointerCount: 2}) + return ClientConfig{st}, err } -func NewRootCloudflaredConfig(s *capnp.Segment) (CloudflaredConfig, error) { - st, err := capnp.NewRootStruct(s, capnp.ObjectSize{DataSize: 48, PointerCount: 2}) - return CloudflaredConfig{st}, err +func NewRootClientConfig(s *capnp.Segment) (ClientConfig, error) { + st, err := capnp.NewRootStruct(s, capnp.ObjectSize{DataSize: 56, PointerCount: 2}) + return ClientConfig{st}, err } -func ReadRootCloudflaredConfig(msg *capnp.Message) (CloudflaredConfig, error) { +func ReadRootClientConfig(msg *capnp.Message) (ClientConfig, error) { root, err := msg.RootPtr() - return CloudflaredConfig{root.Struct()}, err + return ClientConfig{root.Struct()}, err } -func (s CloudflaredConfig) String() string { - str, _ := text.Marshal(0x984a5b060f122dd1, s.Struct) +func (s ClientConfig) String() string { + str, _ := text.Marshal(0xe84e68c9403d0371, s.Struct) return str } -func (s CloudflaredConfig) Timestamp() int64 { - return int64(s.Struct.Uint64(0)) +func (s ClientConfig) Version() uint64 { + return s.Struct.Uint64(0) } -func (s CloudflaredConfig) SetTimestamp(v int64) { - s.Struct.SetUint64(0, uint64(v)) +func (s ClientConfig) SetVersion(v uint64) { + s.Struct.SetUint64(0, v) } -func (s CloudflaredConfig) AutoUpdateFrequency() int64 { +func (s ClientConfig) AutoUpdateFrequency() int64 { return int64(s.Struct.Uint64(8)) } -func (s CloudflaredConfig) SetAutoUpdateFrequency(v int64) { +func (s ClientConfig) SetAutoUpdateFrequency(v int64) { s.Struct.SetUint64(8, uint64(v)) } -func (s CloudflaredConfig) MetricsUpdateFrequency() int64 { +func (s ClientConfig) MetricsUpdateFrequency() int64 { return int64(s.Struct.Uint64(16)) } -func (s CloudflaredConfig) SetMetricsUpdateFrequency(v int64) { +func (s ClientConfig) SetMetricsUpdateFrequency(v int64) { s.Struct.SetUint64(16, uint64(v)) } -func (s CloudflaredConfig) HeartbeatInterval() int64 { +func (s ClientConfig) HeartbeatInterval() int64 { return int64(s.Struct.Uint64(24)) } -func (s CloudflaredConfig) SetHeartbeatInterval(v int64) { +func (s ClientConfig) SetHeartbeatInterval(v int64) { s.Struct.SetUint64(24, uint64(v)) } -func (s CloudflaredConfig) MaxFailedHeartbeats() uint64 { +func (s ClientConfig) MaxFailedHeartbeats() uint64 { return s.Struct.Uint64(32) } -func (s CloudflaredConfig) SetMaxFailedHeartbeats(v uint64) { +func (s ClientConfig) SetMaxFailedHeartbeats(v uint64) { s.Struct.SetUint64(32, v) } -func (s CloudflaredConfig) GracePeriod() int64 { +func (s ClientConfig) GracePeriod() int64 { return int64(s.Struct.Uint64(40)) } -func (s CloudflaredConfig) SetGracePeriod(v int64) { +func (s ClientConfig) SetGracePeriod(v int64) { s.Struct.SetUint64(40, uint64(v)) } -func (s CloudflaredConfig) DohProxyConfigs() (DoHProxyConfig_List, error) { +func (s ClientConfig) DohProxyConfigs() (DoHProxyConfig_List, error) { p, err := s.Struct.Ptr(0) return DoHProxyConfig_List{List: p.List()}, err } -func (s CloudflaredConfig) HasDohProxyConfigs() bool { +func (s ClientConfig) HasDohProxyConfigs() bool { p, err := s.Struct.Ptr(0) return p.IsValid() || err != nil } -func (s CloudflaredConfig) SetDohProxyConfigs(v DoHProxyConfig_List) error { +func (s ClientConfig) SetDohProxyConfigs(v DoHProxyConfig_List) error { return s.Struct.SetPtr(0, v.List.ToPtr()) } // NewDohProxyConfigs sets the dohProxyConfigs field to a newly // allocated DoHProxyConfig_List, preferring placement in s's segment. -func (s CloudflaredConfig) NewDohProxyConfigs(n int32) (DoHProxyConfig_List, error) { +func (s ClientConfig) NewDohProxyConfigs(n int32) (DoHProxyConfig_List, error) { l, err := NewDoHProxyConfig_List(s.Struct.Segment(), n) if err != nil { return DoHProxyConfig_List{}, err @@ -896,23 +927,23 @@ func (s CloudflaredConfig) NewDohProxyConfigs(n int32) (DoHProxyConfig_List, err return l, err } -func (s CloudflaredConfig) ReverseProxyConfigs() (ReverseProxyConfig_List, error) { +func (s ClientConfig) ReverseProxyConfigs() (ReverseProxyConfig_List, error) { p, err := s.Struct.Ptr(1) return ReverseProxyConfig_List{List: p.List()}, err } -func (s CloudflaredConfig) HasReverseProxyConfigs() bool { +func (s ClientConfig) HasReverseProxyConfigs() bool { p, err := s.Struct.Ptr(1) return p.IsValid() || err != nil } -func (s CloudflaredConfig) SetReverseProxyConfigs(v ReverseProxyConfig_List) error { +func (s ClientConfig) SetReverseProxyConfigs(v ReverseProxyConfig_List) error { return s.Struct.SetPtr(1, v.List.ToPtr()) } // NewReverseProxyConfigs sets the reverseProxyConfigs field to a newly // allocated ReverseProxyConfig_List, preferring placement in s's segment. -func (s CloudflaredConfig) NewReverseProxyConfigs(n int32) (ReverseProxyConfig_List, error) { +func (s ClientConfig) NewReverseProxyConfigs(n int32) (ReverseProxyConfig_List, error) { l, err := NewReverseProxyConfig_List(s.Struct.Segment(), n) if err != nil { return ReverseProxyConfig_List{}, err @@ -921,29 +952,42 @@ func (s CloudflaredConfig) NewReverseProxyConfigs(n int32) (ReverseProxyConfig_L return l, err } -// CloudflaredConfig_List is a list of CloudflaredConfig. -type CloudflaredConfig_List struct{ capnp.List } - -// NewCloudflaredConfig creates a new list of CloudflaredConfig. -func NewCloudflaredConfig_List(s *capnp.Segment, sz int32) (CloudflaredConfig_List, error) { - l, err := capnp.NewCompositeList(s, capnp.ObjectSize{DataSize: 48, PointerCount: 2}, sz) - return CloudflaredConfig_List{l}, err +func (s ClientConfig) NumHAConnections() uint8 { + return s.Struct.Uint8(48) } -func (s CloudflaredConfig_List) At(i int) CloudflaredConfig { - return CloudflaredConfig{s.List.Struct(i)} +func (s ClientConfig) SetNumHAConnections(v uint8) { + s.Struct.SetUint8(48, v) } -func (s CloudflaredConfig_List) Set(i int, v CloudflaredConfig) error { +// ClientConfig_List is a list of ClientConfig. +type ClientConfig_List struct{ capnp.List } + +// NewClientConfig creates a new list of ClientConfig. +func NewClientConfig_List(s *capnp.Segment, sz int32) (ClientConfig_List, error) { + l, err := capnp.NewCompositeList(s, capnp.ObjectSize{DataSize: 56, PointerCount: 2}, sz) + return ClientConfig_List{l}, err +} + +func (s ClientConfig_List) At(i int) ClientConfig { + return ClientConfig{s.List.Struct(i)} +} + +func (s ClientConfig_List) Set(i int, v ClientConfig) error { return s.List.SetStruct(i, v.Struct) } -// CloudflaredConfig_Promise is a wrapper for a CloudflaredConfig promised by a client call. -type CloudflaredConfig_Promise struct{ *capnp.Pipeline } +func (s ClientConfig_List) String() string { + str, _ := text.MarshalList(0xe84e68c9403d0371, s.List) + return str +} -func (p CloudflaredConfig_Promise) Struct() (CloudflaredConfig, error) { +// ClientConfig_Promise is a wrapper for a ClientConfig promised by a client call. +type ClientConfig_Promise struct{ *capnp.Pipeline } + +func (p ClientConfig_Promise) Struct() (ClientConfig, error) { s, err := p.Pipeline.Struct() - return CloudflaredConfig{s}, err + return ClientConfig{s}, err } type ReverseProxyConfig struct{ capnp.Struct } @@ -996,22 +1040,22 @@ func (s ReverseProxyConfig) String() string { return str } -func (s ReverseProxyConfig) TunnelID() (string, error) { +func (s ReverseProxyConfig) TunnelHostname() (string, error) { p, err := s.Struct.Ptr(0) return p.Text(), err } -func (s ReverseProxyConfig) HasTunnelID() bool { +func (s ReverseProxyConfig) HasTunnelHostname() bool { p, err := s.Struct.Ptr(0) return p.IsValid() || err != nil } -func (s ReverseProxyConfig) TunnelIDBytes() ([]byte, error) { +func (s ReverseProxyConfig) TunnelHostnameBytes() ([]byte, error) { p, err := s.Struct.Ptr(0) return p.TextBytes(), err } -func (s ReverseProxyConfig) SetTunnelID(v string) error { +func (s ReverseProxyConfig) SetTunnelHostname(v string) error { return s.Struct.SetText(0, v) } @@ -1021,6 +1065,9 @@ func (s ReverseProxyConfig_origin) Which() ReverseProxyConfig_origin_Which { return ReverseProxyConfig_origin_Which(s.Struct.Uint16(0)) } func (s ReverseProxyConfig_origin) Http() (HTTPOriginConfig, error) { + if s.Struct.Uint16(0) != 0 { + panic("Which() != http") + } p, err := s.Struct.Ptr(1) return HTTPOriginConfig{Struct: p.Struct()}, err } @@ -1051,6 +1098,9 @@ func (s ReverseProxyConfig_origin) NewHttp() (HTTPOriginConfig, error) { } func (s ReverseProxyConfig_origin) Socket() (UnixSocketOriginConfig, error) { + if s.Struct.Uint16(0) != 1 { + panic("Which() != socket") + } p, err := s.Struct.Ptr(1) return UnixSocketOriginConfig{Struct: p.Struct()}, err } @@ -1081,6 +1131,9 @@ func (s ReverseProxyConfig_origin) NewSocket() (UnixSocketOriginConfig, error) { } func (s ReverseProxyConfig_origin) Websocket() (WebSocketOriginConfig, error) { + if s.Struct.Uint16(0) != 2 { + panic("Which() != websocket") + } p, err := s.Struct.Ptr(1) return WebSocketOriginConfig{Struct: p.Struct()}, err } @@ -1111,6 +1164,9 @@ func (s ReverseProxyConfig_origin) NewWebsocket() (WebSocketOriginConfig, error) } func (s ReverseProxyConfig_origin) HelloWorld() (HelloWorldOriginConfig, error) { + if s.Struct.Uint16(0) != 3 { + panic("Which() != helloWorld") + } p, err := s.Struct.Ptr(1) return HelloWorldOriginConfig{Struct: p.Struct()}, err } @@ -1189,6 +1245,11 @@ func (s ReverseProxyConfig_List) Set(i int, v ReverseProxyConfig) error { return s.List.SetStruct(i, v.Struct) } +func (s ReverseProxyConfig_List) String() string { + str, _ := text.MarshalList(0xc766a92976e389c4, s.List) + return str +} + // ReverseProxyConfig_Promise is a wrapper for a ReverseProxyConfig promised by a client call. type ReverseProxyConfig_Promise struct{ *capnp.Pipeline } @@ -1286,6 +1347,11 @@ func (s UnixSocketOriginConfig_List) Set(i int, v UnixSocketOriginConfig) error return s.List.SetStruct(i, v.Struct) } +func (s UnixSocketOriginConfig_List) String() string { + str, _ := text.MarshalList(0x935185ed60218ea3, s.List) + return str +} + // UnixSocketOriginConfig_Promise is a wrapper for a UnixSocketOriginConfig promised by a client call. type UnixSocketOriginConfig_Promise struct{ *capnp.Pipeline } @@ -1355,6 +1421,11 @@ func (s WebSocketOriginConfig_List) Set(i int, v WebSocketOriginConfig) error { return s.List.SetStruct(i, v.Struct) } +func (s WebSocketOriginConfig_List) String() string { + str, _ := text.MarshalList(0xf9c895683ed9ac4c, s.List) + return str +} + // WebSocketOriginConfig_Promise is a wrapper for a WebSocketOriginConfig promised by a client call. type WebSocketOriginConfig_Promise struct{ *capnp.Pipeline } @@ -1508,6 +1579,11 @@ func (s HTTPOriginConfig_List) Set(i int, v HTTPOriginConfig) error { return s.List.SetStruct(i, v.Struct) } +func (s HTTPOriginConfig_List) String() string { + str, _ := text.MarshalList(0xe4a6a1bc139211b4, s.List) + return str +} + // HTTPOriginConfig_Promise is a wrapper for a HTTPOriginConfig promised by a client call. type HTTPOriginConfig_Promise struct{ *capnp.Pipeline } @@ -1606,6 +1682,11 @@ func (s DoHProxyConfig_List) At(i int) DoHProxyConfig { return DoHProxyConfig{s. func (s DoHProxyConfig_List) Set(i int, v DoHProxyConfig) error { return s.List.SetStruct(i, v.Struct) } +func (s DoHProxyConfig_List) String() string { + str, _ := text.MarshalList(0xb167b0bebe562cd0, s.List) + return str +} + // DoHProxyConfig_Promise is a wrapper for a DoHProxyConfig promised by a client call. type DoHProxyConfig_Promise struct{ *capnp.Pipeline } @@ -1656,6 +1737,11 @@ func (s HelloWorldOriginConfig_List) Set(i int, v HelloWorldOriginConfig) error return s.List.SetStruct(i, v.Struct) } +func (s HelloWorldOriginConfig_List) String() string { + str, _ := text.MarshalList(0x8891f360e47c30d3, s.List) + return str +} + // HelloWorldOriginConfig_Promise is a wrapper for a HelloWorldOriginConfig promised by a client call. type HelloWorldOriginConfig_Promise struct{ *capnp.Pipeline } @@ -1740,6 +1826,11 @@ func (s Tag_List) At(i int) Tag { return Tag{s.List.Struct(i)} } func (s Tag_List) Set(i int, v Tag) error { return s.List.SetStruct(i, v.Struct) } +func (s Tag_List) String() string { + str, _ := text.MarshalList(0xcbd96442ae3bb01a, s.List) + return str +} + // Tag_Promise is a wrapper for a Tag promised by a client call. type Tag_Promise struct{ *capnp.Pipeline } @@ -1865,6 +1956,11 @@ func (s ServerInfo_List) At(i int) ServerInfo { return ServerInfo{s.List.Struct( func (s ServerInfo_List) Set(i int, v ServerInfo) error { return s.List.SetStruct(i, v.Struct) } +func (s ServerInfo_List) String() string { + str, _ := text.MarshalList(0xf2c68e2547ec3866, s.List) + return str +} + // ServerInfo_Promise is a wrapper for a ServerInfo promised by a client call. type ServerInfo_Promise struct{ *capnp.Pipeline } @@ -1942,6 +2038,11 @@ func (s UseConfigurationResult_List) Set(i int, v UseConfigurationResult) error return s.List.SetStruct(i, v.Struct) } +func (s UseConfigurationResult_List) String() string { + str, _ := text.MarshalList(0xd58a254e7a792b87, s.List) + return str +} + // UseConfigurationResult_Promise is a wrapper for a UseConfigurationResult promised by a client call. type UseConfigurationResult_Promise struct{ *capnp.Pipeline } @@ -2247,6 +2348,11 @@ func (s TunnelServer_registerTunnel_Params_List) Set(i int, v TunnelServer_regis return s.List.SetStruct(i, v.Struct) } +func (s TunnelServer_registerTunnel_Params_List) String() string { + str, _ := text.MarshalList(0xb70431c0dc014915, s.List) + return str +} + // TunnelServer_registerTunnel_Params_Promise is a wrapper for a TunnelServer_registerTunnel_Params promised by a client call. type TunnelServer_registerTunnel_Params_Promise struct{ *capnp.Pipeline } @@ -2326,6 +2432,11 @@ func (s TunnelServer_registerTunnel_Results_List) Set(i int, v TunnelServer_regi return s.List.SetStruct(i, v.Struct) } +func (s TunnelServer_registerTunnel_Results_List) String() string { + str, _ := text.MarshalList(0xf2c122394f447e8e, s.List) + return str +} + // TunnelServer_registerTunnel_Results_Promise is a wrapper for a TunnelServer_registerTunnel_Results promised by a client call. type TunnelServer_registerTunnel_Results_Promise struct{ *capnp.Pipeline } @@ -2380,6 +2491,11 @@ func (s TunnelServer_getServerInfo_Params_List) Set(i int, v TunnelServer_getSer return s.List.SetStruct(i, v.Struct) } +func (s TunnelServer_getServerInfo_Params_List) String() string { + str, _ := text.MarshalList(0xdc3ed6801961e502, s.List) + return str +} + // TunnelServer_getServerInfo_Params_Promise is a wrapper for a TunnelServer_getServerInfo_Params promised by a client call. type TunnelServer_getServerInfo_Params_Promise struct{ *capnp.Pipeline } @@ -2455,6 +2571,11 @@ func (s TunnelServer_getServerInfo_Results_List) Set(i int, v TunnelServer_getSe return s.List.SetStruct(i, v.Struct) } +func (s TunnelServer_getServerInfo_Results_List) String() string { + str, _ := text.MarshalList(0xe3e37d096a5b564e, s.List) + return str +} + // TunnelServer_getServerInfo_Results_Promise is a wrapper for a TunnelServer_getServerInfo_Results promised by a client call. type TunnelServer_getServerInfo_Results_Promise struct{ *capnp.Pipeline } @@ -2517,6 +2638,11 @@ func (s TunnelServer_unregisterTunnel_Params_List) Set(i int, v TunnelServer_unr return s.List.SetStruct(i, v.Struct) } +func (s TunnelServer_unregisterTunnel_Params_List) String() string { + str, _ := text.MarshalList(0x9b87b390babc2ccf, s.List) + return str +} + // TunnelServer_unregisterTunnel_Params_Promise is a wrapper for a TunnelServer_unregisterTunnel_Params promised by a client call. type TunnelServer_unregisterTunnel_Params_Promise struct{ *capnp.Pipeline } @@ -2567,6 +2693,11 @@ func (s TunnelServer_unregisterTunnel_Results_List) Set(i int, v TunnelServer_un return s.List.SetStruct(i, v.Struct) } +func (s TunnelServer_unregisterTunnel_Results_List) String() string { + str, _ := text.MarshalList(0xa29a916d4ebdd894, s.List) + return str +} + // TunnelServer_unregisterTunnel_Results_Promise is a wrapper for a TunnelServer_unregisterTunnel_Results promised by a client call. type TunnelServer_unregisterTunnel_Results_Promise struct{ *capnp.Pipeline } @@ -2642,6 +2773,11 @@ func (s TunnelServer_connect_Params_List) Set(i int, v TunnelServer_connect_Para return s.List.SetStruct(i, v.Struct) } +func (s TunnelServer_connect_Params_List) String() string { + str, _ := text.MarshalList(0xa766b24d4fe5da35, s.List) + return str +} + // TunnelServer_connect_Params_Promise is a wrapper for a TunnelServer_connect_Params promised by a client call. type TunnelServer_connect_Params_Promise struct{ *capnp.Pipeline } @@ -2721,6 +2857,11 @@ func (s TunnelServer_connect_Results_List) Set(i int, v TunnelServer_connect_Res return s.List.SetStruct(i, v.Struct) } +func (s TunnelServer_connect_Results_List) String() string { + str, _ := text.MarshalList(0xfeac5c8f4899ef7c, s.List) + return str +} + // TunnelServer_connect_Results_Promise is a wrapper for a TunnelServer_connect_Results promised by a client call. type TunnelServer_connect_Results_Promise struct{ *capnp.Pipeline } @@ -2733,55 +2874,55 @@ func (p TunnelServer_connect_Results_Promise) Result() ConnectResult_Promise { return ConnectResult_Promise{Pipeline: p.Pipeline.GetPipeline(0)} } -type CloudflaredServer struct{ Client capnp.Client } +type ClientService struct{ Client capnp.Client } -// CloudflaredServer_TypeID is the unique identifier for the type CloudflaredServer. -const CloudflaredServer_TypeID = 0xf548cef9dea2a4a1 +// ClientService_TypeID is the unique identifier for the type ClientService. +const ClientService_TypeID = 0xf143a395ed8b3133 -func (c CloudflaredServer) UseConfiguration(ctx context.Context, params func(CloudflaredServer_useConfiguration_Params) error, opts ...capnp.CallOption) CloudflaredServer_useConfiguration_Results_Promise { +func (c ClientService) UseConfiguration(ctx context.Context, params func(ClientService_useConfiguration_Params) error, opts ...capnp.CallOption) ClientService_useConfiguration_Results_Promise { if c.Client == nil { - return CloudflaredServer_useConfiguration_Results_Promise{Pipeline: capnp.NewPipeline(capnp.ErrorAnswer(capnp.ErrNullClient))} + return ClientService_useConfiguration_Results_Promise{Pipeline: capnp.NewPipeline(capnp.ErrorAnswer(capnp.ErrNullClient))} } call := &capnp.Call{ Ctx: ctx, Method: capnp.Method{ - InterfaceID: 0xf548cef9dea2a4a1, + InterfaceID: 0xf143a395ed8b3133, MethodID: 0, - InterfaceName: "tunnelrpc/tunnelrpc.capnp:CloudflaredServer", + InterfaceName: "tunnelrpc/tunnelrpc.capnp:ClientService", MethodName: "useConfiguration", }, Options: capnp.NewCallOptions(opts), } if params != nil { call.ParamsSize = capnp.ObjectSize{DataSize: 0, PointerCount: 1} - call.ParamsFunc = func(s capnp.Struct) error { return params(CloudflaredServer_useConfiguration_Params{Struct: s}) } + call.ParamsFunc = func(s capnp.Struct) error { return params(ClientService_useConfiguration_Params{Struct: s}) } } - return CloudflaredServer_useConfiguration_Results_Promise{Pipeline: capnp.NewPipeline(c.Client.Call(call))} + return ClientService_useConfiguration_Results_Promise{Pipeline: capnp.NewPipeline(c.Client.Call(call))} } -type CloudflaredServer_Server interface { - UseConfiguration(CloudflaredServer_useConfiguration) error +type ClientService_Server interface { + UseConfiguration(ClientService_useConfiguration) error } -func CloudflaredServer_ServerToClient(s CloudflaredServer_Server) CloudflaredServer { +func ClientService_ServerToClient(s ClientService_Server) ClientService { c, _ := s.(server.Closer) - return CloudflaredServer{Client: server.New(CloudflaredServer_Methods(nil, s), c)} + return ClientService{Client: server.New(ClientService_Methods(nil, s), c)} } -func CloudflaredServer_Methods(methods []server.Method, s CloudflaredServer_Server) []server.Method { +func ClientService_Methods(methods []server.Method, s ClientService_Server) []server.Method { if cap(methods) == 0 { methods = make([]server.Method, 0, 1) } methods = append(methods, server.Method{ Method: capnp.Method{ - InterfaceID: 0xf548cef9dea2a4a1, + InterfaceID: 0xf143a395ed8b3133, MethodID: 0, - InterfaceName: "tunnelrpc/tunnelrpc.capnp:CloudflaredServer", + InterfaceName: "tunnelrpc/tunnelrpc.capnp:ClientService", MethodName: "useConfiguration", }, Impl: func(c context.Context, opts capnp.CallOptions, p, r capnp.Struct) error { - call := CloudflaredServer_useConfiguration{c, opts, CloudflaredServer_useConfiguration_Params{Struct: p}, CloudflaredServer_useConfiguration_Results{Struct: r}} + call := ClientService_useConfiguration{c, opts, ClientService_useConfiguration_Params{Struct: p}, ClientService_useConfiguration_Results{Struct: r}} return s.UseConfiguration(call) }, ResultsSize: capnp.ObjectSize{DataSize: 0, PointerCount: 1}, @@ -2790,135 +2931,140 @@ func CloudflaredServer_Methods(methods []server.Method, s CloudflaredServer_Serv return methods } -// CloudflaredServer_useConfiguration holds the arguments for a server call to CloudflaredServer.useConfiguration. -type CloudflaredServer_useConfiguration struct { +// ClientService_useConfiguration holds the arguments for a server call to ClientService.useConfiguration. +type ClientService_useConfiguration struct { Ctx context.Context Options capnp.CallOptions - Params CloudflaredServer_useConfiguration_Params - Results CloudflaredServer_useConfiguration_Results + Params ClientService_useConfiguration_Params + Results ClientService_useConfiguration_Results } -type CloudflaredServer_useConfiguration_Params struct{ capnp.Struct } +type ClientService_useConfiguration_Params struct{ capnp.Struct } -// CloudflaredServer_useConfiguration_Params_TypeID is the unique identifier for the type CloudflaredServer_useConfiguration_Params. -const CloudflaredServer_useConfiguration_Params_TypeID = 0xbcae494a1cb9c358 +// ClientService_useConfiguration_Params_TypeID is the unique identifier for the type ClientService_useConfiguration_Params. +const ClientService_useConfiguration_Params_TypeID = 0xb9d4ef45c2b5fc5b -func NewCloudflaredServer_useConfiguration_Params(s *capnp.Segment) (CloudflaredServer_useConfiguration_Params, error) { +func NewClientService_useConfiguration_Params(s *capnp.Segment) (ClientService_useConfiguration_Params, error) { st, err := capnp.NewStruct(s, capnp.ObjectSize{DataSize: 0, PointerCount: 1}) - return CloudflaredServer_useConfiguration_Params{st}, err + return ClientService_useConfiguration_Params{st}, err } -func NewRootCloudflaredServer_useConfiguration_Params(s *capnp.Segment) (CloudflaredServer_useConfiguration_Params, error) { +func NewRootClientService_useConfiguration_Params(s *capnp.Segment) (ClientService_useConfiguration_Params, error) { st, err := capnp.NewRootStruct(s, capnp.ObjectSize{DataSize: 0, PointerCount: 1}) - return CloudflaredServer_useConfiguration_Params{st}, err + return ClientService_useConfiguration_Params{st}, err } -func ReadRootCloudflaredServer_useConfiguration_Params(msg *capnp.Message) (CloudflaredServer_useConfiguration_Params, error) { +func ReadRootClientService_useConfiguration_Params(msg *capnp.Message) (ClientService_useConfiguration_Params, error) { root, err := msg.RootPtr() - return CloudflaredServer_useConfiguration_Params{root.Struct()}, err + return ClientService_useConfiguration_Params{root.Struct()}, err } -func (s CloudflaredServer_useConfiguration_Params) String() string { - str, _ := text.Marshal(0xbcae494a1cb9c358, s.Struct) +func (s ClientService_useConfiguration_Params) String() string { + str, _ := text.Marshal(0xb9d4ef45c2b5fc5b, s.Struct) return str } -func (s CloudflaredServer_useConfiguration_Params) CloudflaredConfig() (CloudflaredConfig, error) { +func (s ClientService_useConfiguration_Params) ClientConfig() (ClientConfig, error) { p, err := s.Struct.Ptr(0) - return CloudflaredConfig{Struct: p.Struct()}, err + return ClientConfig{Struct: p.Struct()}, err } -func (s CloudflaredServer_useConfiguration_Params) HasCloudflaredConfig() bool { +func (s ClientService_useConfiguration_Params) HasClientConfig() bool { p, err := s.Struct.Ptr(0) return p.IsValid() || err != nil } -func (s CloudflaredServer_useConfiguration_Params) SetCloudflaredConfig(v CloudflaredConfig) error { +func (s ClientService_useConfiguration_Params) SetClientConfig(v ClientConfig) error { return s.Struct.SetPtr(0, v.Struct.ToPtr()) } -// NewCloudflaredConfig sets the cloudflaredConfig field to a newly -// allocated CloudflaredConfig struct, preferring placement in s's segment. -func (s CloudflaredServer_useConfiguration_Params) NewCloudflaredConfig() (CloudflaredConfig, error) { - ss, err := NewCloudflaredConfig(s.Struct.Segment()) +// NewClientConfig sets the clientServiceConfig field to a newly +// allocated ClientConfig struct, preferring placement in s's segment. +func (s ClientService_useConfiguration_Params) NewClientConfig() (ClientConfig, error) { + ss, err := NewClientConfig(s.Struct.Segment()) if err != nil { - return CloudflaredConfig{}, err + return ClientConfig{}, err } err = s.Struct.SetPtr(0, ss.Struct.ToPtr()) return ss, err } -// CloudflaredServer_useConfiguration_Params_List is a list of CloudflaredServer_useConfiguration_Params. -type CloudflaredServer_useConfiguration_Params_List struct{ capnp.List } +// ClientService_useConfiguration_Params_List is a list of ClientService_useConfiguration_Params. +type ClientService_useConfiguration_Params_List struct{ capnp.List } -// NewCloudflaredServer_useConfiguration_Params creates a new list of CloudflaredServer_useConfiguration_Params. -func NewCloudflaredServer_useConfiguration_Params_List(s *capnp.Segment, sz int32) (CloudflaredServer_useConfiguration_Params_List, error) { +// NewClientService_useConfiguration_Params creates a new list of ClientService_useConfiguration_Params. +func NewClientService_useConfiguration_Params_List(s *capnp.Segment, sz int32) (ClientService_useConfiguration_Params_List, error) { l, err := capnp.NewCompositeList(s, capnp.ObjectSize{DataSize: 0, PointerCount: 1}, sz) - return CloudflaredServer_useConfiguration_Params_List{l}, err + return ClientService_useConfiguration_Params_List{l}, err } -func (s CloudflaredServer_useConfiguration_Params_List) At(i int) CloudflaredServer_useConfiguration_Params { - return CloudflaredServer_useConfiguration_Params{s.List.Struct(i)} +func (s ClientService_useConfiguration_Params_List) At(i int) ClientService_useConfiguration_Params { + return ClientService_useConfiguration_Params{s.List.Struct(i)} } -func (s CloudflaredServer_useConfiguration_Params_List) Set(i int, v CloudflaredServer_useConfiguration_Params) error { +func (s ClientService_useConfiguration_Params_List) Set(i int, v ClientService_useConfiguration_Params) error { return s.List.SetStruct(i, v.Struct) } -// CloudflaredServer_useConfiguration_Params_Promise is a wrapper for a CloudflaredServer_useConfiguration_Params promised by a client call. -type CloudflaredServer_useConfiguration_Params_Promise struct{ *capnp.Pipeline } - -func (p CloudflaredServer_useConfiguration_Params_Promise) Struct() (CloudflaredServer_useConfiguration_Params, error) { - s, err := p.Pipeline.Struct() - return CloudflaredServer_useConfiguration_Params{s}, err -} - -func (p CloudflaredServer_useConfiguration_Params_Promise) CloudflaredConfig() CloudflaredConfig_Promise { - return CloudflaredConfig_Promise{Pipeline: p.Pipeline.GetPipeline(0)} -} - -type CloudflaredServer_useConfiguration_Results struct{ capnp.Struct } - -// CloudflaredServer_useConfiguration_Results_TypeID is the unique identifier for the type CloudflaredServer_useConfiguration_Results. -const CloudflaredServer_useConfiguration_Results_TypeID = 0xabe155b01da72ed9 - -func NewCloudflaredServer_useConfiguration_Results(s *capnp.Segment) (CloudflaredServer_useConfiguration_Results, error) { - st, err := capnp.NewStruct(s, capnp.ObjectSize{DataSize: 0, PointerCount: 1}) - return CloudflaredServer_useConfiguration_Results{st}, err -} - -func NewRootCloudflaredServer_useConfiguration_Results(s *capnp.Segment) (CloudflaredServer_useConfiguration_Results, error) { - st, err := capnp.NewRootStruct(s, capnp.ObjectSize{DataSize: 0, PointerCount: 1}) - return CloudflaredServer_useConfiguration_Results{st}, err -} - -func ReadRootCloudflaredServer_useConfiguration_Results(msg *capnp.Message) (CloudflaredServer_useConfiguration_Results, error) { - root, err := msg.RootPtr() - return CloudflaredServer_useConfiguration_Results{root.Struct()}, err -} - -func (s CloudflaredServer_useConfiguration_Results) String() string { - str, _ := text.Marshal(0xabe155b01da72ed9, s.Struct) +func (s ClientService_useConfiguration_Params_List) String() string { + str, _ := text.MarshalList(0xb9d4ef45c2b5fc5b, s.List) return str } -func (s CloudflaredServer_useConfiguration_Results) Result() (UseConfigurationResult, error) { +// ClientService_useConfiguration_Params_Promise is a wrapper for a ClientService_useConfiguration_Params promised by a client call. +type ClientService_useConfiguration_Params_Promise struct{ *capnp.Pipeline } + +func (p ClientService_useConfiguration_Params_Promise) Struct() (ClientService_useConfiguration_Params, error) { + s, err := p.Pipeline.Struct() + return ClientService_useConfiguration_Params{s}, err +} + +func (p ClientService_useConfiguration_Params_Promise) ClientConfig() ClientConfig_Promise { + return ClientConfig_Promise{Pipeline: p.Pipeline.GetPipeline(0)} +} + +type ClientService_useConfiguration_Results struct{ capnp.Struct } + +// ClientService_useConfiguration_Results_TypeID is the unique identifier for the type ClientService_useConfiguration_Results. +const ClientService_useConfiguration_Results_TypeID = 0x91f7a001ca145b9d + +func NewClientService_useConfiguration_Results(s *capnp.Segment) (ClientService_useConfiguration_Results, error) { + st, err := capnp.NewStruct(s, capnp.ObjectSize{DataSize: 0, PointerCount: 1}) + return ClientService_useConfiguration_Results{st}, err +} + +func NewRootClientService_useConfiguration_Results(s *capnp.Segment) (ClientService_useConfiguration_Results, error) { + st, err := capnp.NewRootStruct(s, capnp.ObjectSize{DataSize: 0, PointerCount: 1}) + return ClientService_useConfiguration_Results{st}, err +} + +func ReadRootClientService_useConfiguration_Results(msg *capnp.Message) (ClientService_useConfiguration_Results, error) { + root, err := msg.RootPtr() + return ClientService_useConfiguration_Results{root.Struct()}, err +} + +func (s ClientService_useConfiguration_Results) String() string { + str, _ := text.Marshal(0x91f7a001ca145b9d, s.Struct) + return str +} + +func (s ClientService_useConfiguration_Results) Result() (UseConfigurationResult, error) { p, err := s.Struct.Ptr(0) return UseConfigurationResult{Struct: p.Struct()}, err } -func (s CloudflaredServer_useConfiguration_Results) HasResult() bool { +func (s ClientService_useConfiguration_Results) HasResult() bool { p, err := s.Struct.Ptr(0) return p.IsValid() || err != nil } -func (s CloudflaredServer_useConfiguration_Results) SetResult(v UseConfigurationResult) error { +func (s ClientService_useConfiguration_Results) SetResult(v UseConfigurationResult) error { return s.Struct.SetPtr(0, v.Struct.ToPtr()) } // NewResult sets the result field to a newly // allocated UseConfigurationResult struct, preferring placement in s's segment. -func (s CloudflaredServer_useConfiguration_Results) NewResult() (UseConfigurationResult, error) { +func (s ClientService_useConfiguration_Results) NewResult() (UseConfigurationResult, error) { ss, err := NewUseConfigurationResult(s.Struct.Segment()) if err != nil { return UseConfigurationResult{}, err @@ -2927,243 +3073,248 @@ func (s CloudflaredServer_useConfiguration_Results) NewResult() (UseConfiguratio return ss, err } -// CloudflaredServer_useConfiguration_Results_List is a list of CloudflaredServer_useConfiguration_Results. -type CloudflaredServer_useConfiguration_Results_List struct{ capnp.List } +// ClientService_useConfiguration_Results_List is a list of ClientService_useConfiguration_Results. +type ClientService_useConfiguration_Results_List struct{ capnp.List } -// NewCloudflaredServer_useConfiguration_Results creates a new list of CloudflaredServer_useConfiguration_Results. -func NewCloudflaredServer_useConfiguration_Results_List(s *capnp.Segment, sz int32) (CloudflaredServer_useConfiguration_Results_List, error) { +// NewClientService_useConfiguration_Results creates a new list of ClientService_useConfiguration_Results. +func NewClientService_useConfiguration_Results_List(s *capnp.Segment, sz int32) (ClientService_useConfiguration_Results_List, error) { l, err := capnp.NewCompositeList(s, capnp.ObjectSize{DataSize: 0, PointerCount: 1}, sz) - return CloudflaredServer_useConfiguration_Results_List{l}, err + return ClientService_useConfiguration_Results_List{l}, err } -func (s CloudflaredServer_useConfiguration_Results_List) At(i int) CloudflaredServer_useConfiguration_Results { - return CloudflaredServer_useConfiguration_Results{s.List.Struct(i)} +func (s ClientService_useConfiguration_Results_List) At(i int) ClientService_useConfiguration_Results { + return ClientService_useConfiguration_Results{s.List.Struct(i)} } -func (s CloudflaredServer_useConfiguration_Results_List) Set(i int, v CloudflaredServer_useConfiguration_Results) error { +func (s ClientService_useConfiguration_Results_List) Set(i int, v ClientService_useConfiguration_Results) error { return s.List.SetStruct(i, v.Struct) } -// CloudflaredServer_useConfiguration_Results_Promise is a wrapper for a CloudflaredServer_useConfiguration_Results promised by a client call. -type CloudflaredServer_useConfiguration_Results_Promise struct{ *capnp.Pipeline } - -func (p CloudflaredServer_useConfiguration_Results_Promise) Struct() (CloudflaredServer_useConfiguration_Results, error) { - s, err := p.Pipeline.Struct() - return CloudflaredServer_useConfiguration_Results{s}, err +func (s ClientService_useConfiguration_Results_List) String() string { + str, _ := text.MarshalList(0x91f7a001ca145b9d, s.List) + return str } -func (p CloudflaredServer_useConfiguration_Results_Promise) Result() UseConfigurationResult_Promise { +// ClientService_useConfiguration_Results_Promise is a wrapper for a ClientService_useConfiguration_Results promised by a client call. +type ClientService_useConfiguration_Results_Promise struct{ *capnp.Pipeline } + +func (p ClientService_useConfiguration_Results_Promise) Struct() (ClientService_useConfiguration_Results, error) { + s, err := p.Pipeline.Struct() + return ClientService_useConfiguration_Results{s}, err +} + +func (p ClientService_useConfiguration_Results_Promise) Result() UseConfigurationResult_Promise { return UseConfigurationResult_Promise{Pipeline: p.Pipeline.GetPipeline(0)} } -const schema_db8274f9144abc7e = "x\xda\xacY\x7f\x8c\x14\xf5\x15\x7fof\xf7\xe6\x0e\xee" + - "\xd8\x1df\xa1\xe7\xc5\xcb)\xc1X)P\x90\xd2\xc2\xb5" + - "\xf5~p\xe0\xed\xc9\x8f\x9d\xdb;4\x88\x09s\xbb\xdf" + - "\xdb\x1b\x98\x9dYff\x813 B\xa0\xc2E\xe5\x87" + - "\x92\x08\xd5F\xa8-j\xa9\x05kc\xb4h4m\xaa" + - "\xc6X5\xadMii\x93VI\xd5\x94XQ\x93\xd2" + - "\xa8\xd3\xbc\x99\x9d\x1f\xb7w\x1e\xd8\xf4\x9f\xcb\xe6\xcd\xfb" + - "~\xdf\xfb\xbe\xef\xe7}\xde\xfb\xbe\x9b\xb7Oh\xe7\xe6" + - "\xc7\x9f\x9e\x0c \xef\x89\xd78\xdf)\xbe~\xec\x9b\x87" + - "^\xdd\x05b\x13\xe7\xdcq\xba'u\xd1\xde\xf9g\x00" + - "\\\xf0b\xfcv\x94\xde\x8a\x0b\x00\xd2\x9b\xf1U\x80\xce" + - "\xef\xe6m}g\xddG\x07\xf6\x80\xd8\x84\xa1fL\x00" + - "X\xf0^|\x04%\xac\x11\x80w~x\xef\xd5\xeb\xce" + - "\xef\x96\xef\x1b\xad\x15GR\xfb\x0b\xa9}\xe2n\xf9a" + - "\xbc\x0d\xd0ys\xce\xd4D\xcd\xad=\x0f\x80\xdc\x845" + - "\x11m\x8e\xb4\xc5\x9a\x01\x94\xae\xa9\xa1\x9fW\xd7\xbc\x84" + - "\x80\xce\xeb\xb3O?\xbb\xff\xe7w}\x1f\xe4k\x11\xc1" + - "3\xbd\xb8\xf6?\x08(\xad\xa8\xa5\xfd\xee\xff\xe3s+" + - "\x8b\x07\x8e\x1c\x03\xf1Z\xff{\xb9\x96\xe3 \xe6,\xfc" + - "\xd3\xb9U+\x9e\x1c<\xee}\xf1\xdcQk\x9f\xa4\xa5" + - "\xc3\xee\xd2\x977'\xef\xee\xf8\xd6\xbe\xe3\xe4J\xd4q" + - "w\x93\x87jGP\xfaE-\xfd\xcd\xa1cx\xa9M\xfe\xdb\xd8\x00\x1c6\x00:" + - "\xb9JzB\x8b\xc9\xf2\xe9\xae@\xae\x97\x8b\x19\x93m" + - "R\xd1([\x1d\xb6\xcd\x8aB\xc9\xb6\xb0\x068\xac\x01" + - "L\xd8J\x14,A=\xac\x80\xc5\xdf\x13M\x96_\xcd" + - "LK\xe5\x0d}\x0cU\x8c\x13\xa6\xde\x0a&}H\xaa" + - "\x85\xb9\x86\xa9\x0a\x05U\x97\x93|\xecJ\xc7\xa9\xc4D" + - "\xa1\xa3\xae\xe5Q\x1e\xe2\xb0\x19?'1\x85\x85\xb5\x02" + - "\xc8\xebx\x945\x0e\x9b\xb9\xcfHL\x81Q\x89`\x86" + - "x\x94m\x0e\x9b\xf9OIL\xa1\xd9H\xd1.\xf1(" + - "o\xe501d\xdb%L\x865\xd4\xbb\xd26\xcb\xa5" + - "DL\x86\xedd\xe5\xae7\xb3\x01\xf7\x1b }\x0dj" + - "N\xe5\xebP\x85\x84\x81\xd7\xf2\x98\x0c;\xd6*\xa0\x08" + - "\x13\x92\xa5\x8fm\x8by\xa1(\x9b\x8a\xad\x1a:a;" + - "A\xe0\x8e\xa2\xb45\xe4\xe56\xd3\xc5>&\xc3\xce\xa3" + - "\xca,?\x8eY\x17\x9am\xf6R\xd34L\xb7,\x05" + - "{/\xbd\x1e@n\xe7Q^\xce\xa1\x8f\xc94\x85\xae" + - "\x9bG\xb9\x8f\xd8\xb9\xdd\x8b\xbe<\x00 gx\x94\xd7" + - "r\xd8\x92S\xca\x16\x0b\xae\xdcd\xb69\xdc1h\x03" + - "\xcf\xcc \xb9\xad!\xa3\xac\xe5{\x19\x08\xb69\x8c\x08" + - "\x1c\xe2\xc4\x85\xa4\xcb\xe8\x8e \xc3K\x9e\x88\x9f\xe4S" + - "\x17\x8fr&\xf4s\x05\xc9\x96\xf3(\xdfB~VP" + - "\xd2Op\xe8\xe3Q.q\xe8h\xc4\x1az\xb7\x01\xbc" + - "e\x07\xeez\xc2\x8c\xe1\xe6\x89\x00\x1c\x0a\x80N\xb9d" + - "\xd9&#\xf6\x0f\x80O\xfa_\x86\x1b\xabH*\xa3$" + - "\\\xb6\x19\xff\x0c\x01\x01\xac\xe8\x89\x1e\xa2\xc2\x00\xfd\x9d" + - "a\xb0\xc7\xcf\xeb!\xc3\xb2u\xa5\xc8\x00\xc0?\xd8v" + - "\xa3D\x08\"\xee\x0a\x1a\xde\xff\x0b$3\x8a)T\xf1" + - "\xe6\xc1\x08\xc7G\xe9\xc0]\x88\x05L\x86\x8f\xae*\x17" + - "\xc6\xb9\xf9\x8e\xb2=\xc4t[\xcd\xb9\xe6\xc6\xdc\xfc\x8c" + - "\x10\xa1A\xd4\xd2\xd7GB\xe9Gm\xc5@\x18Ja" + - "\x03\x1b\xf6\x03\xd3\xc2\x8a\x8a\xaa\x05\xf7_\x89g\x07\x08" + - "7\x85:\x13\xf97\x9a\xb7\x12z\xa5\xc7i\x0c\\<" + - "Lw\xf8\x00\x8f\xf2#\x04N\x8c\xbc\xdb\xc4\xa3\xad\xc0" + - "\xb9\xd8\x8c\x03\x88{;C\xb2w\x89\xbd\x86\xd8\xfe`" + - "\x84\xedcI\xb79\x11\x0f\xef\x0cw\x14\xe3|\x0ak" + - "\x01\xc4\xa3\xc4\xf6\x8fx%\xa0\xe2o\xba+\x02\x806" + - "\xefd\xdb)\x1fU\x166\x13\x95\xfa\xa7\xa2\xa1\xf7\xa9" + - "Ef\x94\xd1\x0e\xd247T\xd67\xb0\xfcR\xd4s" + - "F^\xd5\x0b\x10\xa4j\xce(\x96LfY\xa8\x1a\xba" + - "\\V4\x95\xb7\x87\x83-'\x8c\x16\xa5\x81\x07\x9dU" + - "\xa5\x16\x17\x92\x14\xaey~\xb8\xa4\x0e\xec\x01\xc8\xb6S" + - "\xe7\xb5\x1c\xc3K\x95\xd2\xd8\x09\x90\xed\"y\x06\xc3{" + - "\x95V`\x13@\xb6\x9b\xe4}\xd4\xd8y\xad\xa1$\xe3" + - "\xe3\x00\xd9>\x12\xaf\xc3\xb0(J\xb7\xb9\xdb\xaf%\xf9" + - "\x90\xdb\x1f\xc6\xbc\xfe\x90\xe1,\x80\xec:\x92o%y" + - "\x8dw\x01\xd20\xae\x07\xc8n!\xf9.\xb7A\x8c{" + - "\x0d\xe2\x0e4\x01\xb2w\x92\xfcn\x92\xd76\xba\xd7 " + - "\xedu\xe5{H~?\xc9\xeb\xaeHa\x1d\x80t\xc0" + - "m4\xf7\x93\xfcA\x92O\xc2\x14N\x02\x90\x0e\xe3\x11" + - "\x80\xec\x83$\x7f\x94\xe4\x93kR8\x19@\xfa\x91\xeb" + - "\xcf\xc3$?\x81n\x1e\xa9L\xb7\xd3\xf9hJ\x13\xf0" + - "\xd4\xb0\xba\xf2\x86\x15\x00\x96U\xde\x1c\xe8\xf1M\xc6H" + - "\xd0\xa3\x03\x13\xe1\xac\x05\x10\x13\x80N\xc90\xb4\x95\xa3" + - "\xa9\xe2R\x05\xbe\x02\x18H\x18z:\xefw\x05\x95\xc4" + - "Yn@KN\xd1\xd2\xa5\xc0\x13\xd5\xea(\xdbF\xb9" + - "\x04-\xd4\x07\xe7\x03\x04\x99e}\x99i\x14\xfb\x90\x99" + - "EUW\xb4\xcb\xc3V\xa2\\V\xf3c\xd2\x92\xab\x06" + - "ZK\xa9\xb5Oq\xf3\xb06\xc8\xc3\xeb\xa8q\x98\xc9" + - "\xa3\xdbTE\xeb" + - "*+\x1a\xb4dm%\xb7!l\x864\xab[\xd1\xf3" + - "\x16\x0e)\x1b\x181\xb3`\x94Cf\xb65k53" + - "\xd5A\xc0\xb0}\x0aJW\"c\x18\xd5\x15-\xcb\x90" + - "\xee\xd3K\xf5\xe0[Q\xd9\x92\xcekl\x09Vr\xda" + - "\xe0\xf5\xb02\xa8\xf4\xc5\xd0ut\xbf\xe8}j\x0b\x95" + - "\x07{\xcc\x0b\x8d\xff\"0\xb5y\x18\xa2\x9bM\xf2q" + - "\x80`\x10\x88\xfeDI\xdcx;p\xa2*`8\xfd" + - "B\x7f\xd8%\xdef\x02'\xf6\x0b\xc8\x05CW\xf4\x87" + - "\xabbz\x048q\xa9\x80|0UE\x7f\x9e#." + - "\xee\x04N\x9c#8~\xcb\x05m\x9e;\xed\xe8\xf8\xb8" + - "\x86\x16\x17\xd9\xed\xe8\xf8\xcfG\xf4[3\x80v\xdc^" + - "\xe1\xb8v\x8c\x8eN\xbed\x8b\xd7\xcbZ\xac\xcb\xc9\x1a" + - "\x7f v\xe9N\xdd\xb3\x93 \xcf\xabf3\xeb#/" + - "U\xcd\xa8\xb4J\x89\x95\x11>\x9b(\x17=\x87\xfd\xd2" + - "\x9c\xa0\xc5U\x8fS\xca\xc6-<\xca\xbb\"\xd4\xb9c" + - "F\xe4\xc5\xeawY\xbb{*M\xcc\xc3A)\x16\x1f" + - "\x1a\x01\x90\x1f\xe6Q>\x11y\x9c>F\x8a\x8f\xf2(" + - "?\xc5\xa1\xc0L\xd3\xf7sT\xcahFa\xb9\xaa3" + - "\x8b\x8aSU\xdf]bfQ\xd1\x99\x8e\xf62E\xd5" + - "\xca&\xa1z\xf4;bT\xf7s\x99C\xaa,3\x85" + - "\x0abc.b\xfd\xc94\xfa\x03tQ$\xe45\x08" + - "\x8e\xdf\x08\xa3\xcf\xfb\x04\x9cKL\xdanf\x03\xe3\x0c" + - "\xda\xaa\xeerF\x88\x91\xd1\xfc\xf1\xc5\xfb\x8e;\xd0\xe8" + - "mc\x97\x85\xbfp\xceyi\xd6\xae\x8c1*%\xae" + - "\xaa\xc2\xcd\x18\xaf\xbe\xae\x09K\x9c{\xcd\xc9\xf0?\x0d" + - "\x15sV\xa5\xd0\x00?h\x8c\xad!\xff\x0d\x00\x00\xff" + - "\xff\xf8\xb3\xea\x07" +const schema_db8274f9144abc7e = "x\xda\x9cY\x7f\x8c\x14\xf5\x15\x7fofw\xe7\x8e\xbb" + + "sw2wx^\xbc\x9c\x12\x8cB\x81\xa2\xd4\x16i" + + "\xeb\xfd\xc6;\x84c\xe7\xf6\x0e\xe5W\xc2\xb0\xfb\xbd\xdb" + + "\x81\xd9\x99ef\x168\x82\xa2\x04*\\\xfd\x01(\x89" + + "Xi\x00\xb5\x8a\xc1\x16\xad\xc6h\xd1HS\xab\xd64" + + "\xb6\xa96\xb5\xb5\xffTI\xd5\x94PP\xd3\xd2\xa8\xd3" + + "\xbc\x99\x9d\x1f\xb7w\xe5\xa0\xff\\6o\xde\xf7\xbd\xf7" + + "}?>\xef}\xdf\xcd=(\xb4q\xd7\xc7_\xac\x01" + + "\x90w\xc5\x13\xce\xf7\x0a\xef\x1c\xf9\xf6\xfe\xb7w\x80\xd8" + + "\xc49w\x9eXT\x7f\xde\xde\xfe\x17\x00\x9cw2\xbe" + + "\x05\xa5\xf7\xe2\x02\x80\xf4\xfb\xf8R@\xe7\x0fs\xb7~" + + "\xb4\xe6\xb3\xbd\xbb@l\xc2\x903&\x00\xcc\xfb$>" + + "\x8a\x12&\x04\xe0\x9d\x83+\xeb\x7f\x83\x87\xfe\xb5\x17\xc4" + + "\xeb\x10 \x8e\xf4\xf9\xaf\xf1)\x1c\xa0\xf4E\xbc\x15\xd0" + + "y\xec\xfe\xab\xd7\x9c\xde)?8V\x8c\xc7\xd8\x90\x18" + + "Eiv\x82t\xceH\x10\xf3;\xb3N\xbc\xbc\xe7\xe7" + + "\xf7\xfc\x08\xe4k\x11\xc1S\xd6\x9b\xf8\x0f\x02J\xab]" + + "\x86\x87\xfe\xf4J_a\xef#G@\xbc\xd6\xff\xbe3" + + "\xc1q\x10sn\xfc\xf3\xa9\xa5K\x9e\x1bz\xd2\xfb\xe2" + + "\xc9\x1fI\xb8/~\xea" + + "\xc17*o.\xb8\x91\xab3QZ]G?\x97\xd7" + + "=\xc9\x01:M\xc7\xbf\xfb\xd3\x8e\xdc\xfboW\x98B" + + "\xc2\xa5\xee\xd49IN\xd1\xaf%\xa9M\x80\xce=\xdf" + + "\x18\xd9\xd2w\xcd\xe8{\x95nr/x45\x8a\xd2" + + "I\x97\xfb\x15\x97\x9b;\xa5\\q\xd7\x1fo\xfe \x92" + + "\x18\xcd\xe2\xdf\x10bN\xdf\xb2\x95\xeb\xaa\xef\xf8\xf0\xc3" + + "hb\x88\xa2\xeb\xc0kD\xf2\xcf\xf3\xe2>\xe9\xc4\xe1" + + "\x9f|D\x8a\xe2\xe3\x1c$\xae@i\xb9\xe8z]t" + + "\xe8\xca\x1b\xf8\xef\xb7\xbd\x95\xef\xfb\x98\xd8\x85J\x0f\xed" + + "\x94L\x94\x0eH\xf4s\xbf\xe4\xb2\xdf\xb8\xa6\x9d\xad\x9a" + + "\x7f\xfb\xa7 6\xf1c\x0a\xeet\xc3\x02\x94\xbej " + + "\xd6\xf3\x0d\x02JG\xa7\x0a\x00\xce\xbc\xeb\x7fxz\xff" + + "c\x9dg\xc7\xb1\xef\x9d\xda\x81\xd2a\xe2\x91\x0eN\xbd" + + "E\xfa\xad\xcb}\xff\x9d]Ko\x9av\xf2\\\xf4n" + + "/L=Gw{k*\xddmh\xfe?n\xb9\xe6" + + "\xfe_\x9f\x9b\xa8\xfa>\x99:\x13\xa5\xf3\xae\xc4/\x88" + + "\xf9\xcc\xc2\x1f\xbf\xdb\x94l\xfa|\xa2\xfa\xb8\xe2\xf2u" + + "(\xcd\xbe\x9c~\xce\xb8\xdc\xad\x8f\xc5\xc7\xde\xbf9\xbf" + + "\xff\xcd\xf3\x13I^\xde\xb8\x1d\xa5B#IV\x1b\xc9" + + "\x8c\xadg\x0e\xf4<\xb0\xea\xd8\xd7Q;w7\xbeL" + + "v\x1ep\x19\xd6\xed\xdfj\xf7<|\x9f3Ab\xcc" + + "{\xa9\xb1\x03\xa5\xb7\\i\xaf7n\x82\xd9\x8e]\xd2" + + "u\xa6\x99\xc5X\xf6\x9b\xfe\xcf\xec\x9c\xacR\xd4\x8b\x0b" + + "\xba7\xab\x96\xad\xea\xc3\x03.\xbd5mhjv$" + + "\x8d(\xd7\"\x07 6/\x00@\x14\x1bV\x00 '" + + "\x8a\x1d\x00\xad\xea\xb0n\x98\xcc\xc9\xa9V\xd6\xd0u\x06" + + "|\xd6\xde\xb6V\xd1\x14=\xcb\x02E\xf1\xf1\x8az\x98" + + "\xa6\x19\xb7\x19\xa6\x96[j\xaa\xc3\xaa\xdei\xe8C\xea" + + "0@\x1a18&\x8c?\xd6\xa9\xa9L\xb73\xcc\xdc" + + "\xa8f\xd9\x9c\x92\xc5\xbcs%S\xb1UC\x9f\xde\xcf" + + "\xac\x92f[\x00r\x8c\x8f\x01\xc4\x10@\xac[\x00 " + + "W\xf1(\xd7s\xd8j\xba\x0c\x98\x0a\xab\x03\x10S\x80" + + "\x172uPW7g\x8c\xeczf\x8f35\xaaf" + + "f\xa8&YT\xec<\xd6\x02\x87\xb5\x11\xd1\x89\xf1\xa2" + + "=7\xd3u\x989\xa7\xa4\x9blX\xb5lfz\xe4" + + "\xe9\xadi\xc5T\x0aVT\xc9#\x00r\x8aG\xf9J" + + "\x0e\x9daS\xc9\xb243Q5r}\x8andx" + + "\x96\xc58p\x18\x8f(\xad\xbbT\xa5\xbe\x0b\x83S\x17" + + ">\xef\x06=kOO\xb7\x8c\xb3u\x05\x80\\\xcb\xa3" + + "\xdc\xc8\xa1S\xa4\xaf\xccf\xc0\x9b\x16\xa6\xc2^2\xb9" + + "\xf7;\xe9o\xa7\xa7%]\x96bZ\x9e\xf7\xeb\x03e" + + "w\x90\xb2\xad<\xca\xbb8\x14\x11\xeb\xa9\xfb\x89;M" + + "\x00y\x07\x8f\xf2\x1e\x0e\x91\xabw3\xf8\xbe#\x00\xf2" + + "\x1e\x1e\xe5G9\x14y\xae\x1ey\x00\xf1\x00\xc5\xee!" + + "\x1e\xe5\xe3\x1c\x8a1\xbe\x9e:\x94\xf8\x0c\xf9\xfa8\x8f" + + "\xf2\x09\x0e\x1d\xc3\x8b<\xd9oc\x1dpX\x07\xe8d" + + "5\xa3\x94\x1b\xd2\x14h1Y\xae\xb7+\xa0\xeb\xa5B" + + "\xdad\x1bU4JV\xbbm\xb3\x82P\xb4-L\x00" + + "\x87\x09\xc0\xa4\xad\x0c[x\x19`\x9aGL\x85\x88\x0e" + + "H\xc4@&\x9a,\xb7\x8c\x99\x96\xca\x1b\xfa\xb8L\x9a" + + "\xc0M\xfdl#3-\x966\x8d\xcd#^\x82\xce1" + + "LU\x18Vu9\xc5\xc7\xaet\x9c\xb2O\x14\xba\xea" + + "*\x1e\xe5<\x87\xcd\xf85\x91\xc9-\x8c\x8ad\x0d\x8f" + + "\xb2\xc6a3\xf7\x15\x91\xc91j?\x80\x9c\xe7Q\xb6" + + "9l\xe6\xbf$2\xb9f\x03y\xbb\xc8\xa3\xbc\x95\xc3" + + "d\xde\xb6\x8b\x98\x0a\xbb\x80\x17\xd2V\xcb\xad\x18L\x85" + + "\x03L9\xd6\x9b\xd8Z\xf7\x1b }\x0d`\xb0\xfc5" + + "_\xc6\x05\xe0\xb5\x1c\xa6\xc2!\xaa\"Q\xf8\x09\x12\xc5" + + "\xcd\x91V\xbb\xdb4\x0d\xd3\x85\xac ;\xbao\x00\x90" + + "\xdbx\x94\x17s\xe8'G/\xdd\xa1\x87Gy\x80C" + + "\x91k\xf3\xdc \xaf\x05\x90\xd3<\xca\xab8l\xc9*" + + "%\x8b\x05\xbe7\x99m\x8e\xb4\x0f\xd9\xc033\xa82" + + "+o\x94\xb4\\?\x03\xc16G\x10\x81C\x8c\x189" + + "\x01\xbev\x19=\x91\x10yY\x1c\xb1\x93l\xea\xe2Q" + + "N\x87v.!\xdab\x1e\xe5\xdb\xc9\xcer\xb8\x06)" + + ".\x03<\xcaE\x0e\x1d\x8d\xcaW\xef1\x80\xb7\xec\xc0" + + "\\\x8f\x986\xdc\x84\x15\x80C\x01\xd0)\x15-\xdbd" + + "J\x010\xc8@\xe2\xbf\xec\x12@\xaa\x02-\xd2J\xd2" + + "-\xfb\x89\xef\x10T\xe2\x92E\xd1K\x94Kq\xb0#" + + "t\xf6\xc4\x05\x967,[W\x0a\x0c\x00\xfc\x8bm3" + + "\x8a\x84\xf4\x04\"\xc1\xecT\x91\x1b\x97\xde6<\x9c\x1d" + + "\xd34\x8eD\x806[>\x8d\xee\xf1NC\x17\x86\xd4" + + "aL\x85\x93L\x85\x01\x13\xc4\xbd\xbdd\xe7\x99n\xab" + + "YW\xe1\xb8\xb8O\x0b\xf33\xf0Y\xef\x0d\x11G\xfa" + + ">[\xb26t\xa4\xb0\x9e\x8d\xf8nia\x05E\xd5" + + "\x82\xe8\x97\xbd\xd9\x0e\xc2\xad!\xcf\x85\xec\x1b\x0b\x1fI" + + "r\x0e\x99\xd8\x18\x98x`\x0b\x80\xfc0\x8f\xf2\xe3\x94" + + "\x9a\x18\x99\xef\xc5\xc3\x0b\x80s33\x0e \xee\xee\x08" + + "1\xd7\xc5\xd7\x04\x81\xee\xbe\x08\xe8\xc6R\xf54\xbf\x88" + + "\x07\xb6\x87\x12\xc58_\x8fU\x00\xe2a\x02\xdd\xc7=" + + "$.\xdb\xdbc@\xab\x97\x06\xfeEZ\xbd\xebm\xa3" + + "\x92T\x99\x85\xd5\xc0a5a\xa7\xd7%T4\xf4\x01" + + "\xb5\xc0\x8c\x12\xdaA\xa5f\xf3%}=\xcbu\xa3\x9e" + + "5r\xaa>\x0cA\xb5f\x8dB\xd1d\x96\x85\xaa\xa1" + + "\xcb%ESy{$\x10yA\x97Q%x\x19\xb4" + + "\xb4\xd8\xe2f%\xf9l\xae\xef3\xa9\x1d\x17\x01d\xda" + + "\x90\xc7\xccb\x0c#+\xf5b\x07@\xa6\x8b\xe8i\x0c" + + "\x83+-\xc1&\x80L\x0f\xd1\x07\x90C\xe4]\x10\x96" + + "d|\x1a 3@\xe45\x186(i\xb5+~\x15" + + "\xd1\xf3D\x8f\xc7\xdc\x10H\x0cg\x02d\xd6\x10}+" + + "\xd1\x13^\x14\xa4\x11\\\x07\x90\xd9L\xf4\x1dD\x17\xe2" + + "n \xa4\xbb\xd1\x04\xc8\xdcE\xf4{\x89^\xd5\xe8\xc6" + + "B\xda\xed\xd2w\x11\xfd!\xa2W_Q\x8f\xd5\x00\xd2" + + "^\xdc\x0e\x90\xd9C\xf4G\x89>\x05\xebq\x0a\x80t" + + "\x00\x1f\x01\xc8\xd1\xbb\x90C\xa1d\x86\xed\xc5\xce\x16o" + + "e\xac\xd8\x0eIM\xdd\xc8\x02\x8c\xcd\xa9\x8a\xd6UR" + + "4h\xc9\xd8Jv}8\x0fiV\x8f\xa2\xe7,\xcc" + + "+\xeb\x19!\xb3`\x94Bd\xb65k\x193\xd5!" + + "\xc0p\x82\x0a\xfaW2m\x18\x95m\xcdm\xc4\xcc\xf4" + + "J=\xf8VP6\xf7\xe64\xd6\x89\xe5\x9a6x=" + + "\xec\x0c*}1t\x1d\xdd/\xfa\x80\xdaB\xed\xc1\x1e" + + "\xf7Z\x8aM2:t\xb6\x18~k\x8c\x04\xb8#\x0c" + + "pP\x8dgi\x80\xf8\x9c\xc7\xfe\x08\xc0\x8b_\xbd\x0c" + + "\xd0O\x1e\xadu#\\\xc6\xf7j\xdc7&\x92\xb1\x98" + + "\x17\xe1\x067\xf2\x8dD\x9f\xeeF8\xeeE\xf8j\\" + + "\x1b\x8d$&\xbc\x00\xcfpa\xf9:?`\xa2\x80^" + + "\x80\xdb]1]A\xfb\xa8\x9a\xeb\x05x\xb5\x9b\x10n" + + "\x9b\xd0\x90\x0b!\xd8\xf7\x99R\xb2\x8d\xc1bNA\x9b" + + "-4\xd9\x86\x12\x13\xf4\xecH\xe0\xb1\x02\xf5\xde\xac5" + + "\x88E\xc2\xc2\x85&k\xddPbQ\x86\xe0A\x8b\x0b" + + "ym\xe8\xf8o|\xf4\xc7v\x806\xdcVn~m" + + "\x18]\xb9LV\x00\xe5\xa5\x07]\xd4\xdf\x9b\xa2\xbf\xc2" + + "\x16E2\xb8Np\xfc\xf9\x1a\xfd>B\xfa\xa2Z." + + "\xf1\x91\xd1\xcfZ\xac\x8b\x01m\x7f\x017\xf9[\xd1\xd3" + + "\x93$\xffTlq\xd6E\x96\x16\x9aQ\x1e\xd7\x93}" + + "\x91vz!_y\x06\xfb\x93a\x92\x0eW\xec)\xa8" + + "\x19l\xe6Q\xde\x11\xc1\x8a\xbb\xa7E\x96\x17>V\xec" + + "\\T\x1e\xa4\x0f\x05\x93\xa0xp\x14@>\xc4\xa3|" + + ",\xb2\xa78J\x8cO\xf1(?\xcf\xa1\xc0L\xd3\xb7" + + "s\x0cbk\xc6\xf0bUg\x16\xcdF\x15/\xbf\"" + + "3\x0b\x8a\xcet\xb4\xa9&K&\x81\xea\xd8\x97lo" + + "Wd\xa4\xba\xd0\xfcp\x1b[;\xc1\xa2\xac\xc2\xc3\xd3" + + "\xc2\xc8\x8dm*\xff[\xee\x84\x1b\xa7\xfeVvQY" + + "\x11\xeeF'o\xe5\xe5=Sy\xee\xa9\x18{\xa6M" + + "4t\xad\x08\xe7\x1e\xd7\xf9\xa9\xf0\x9f\x19euVy" + + "\xfa\x00~\xc8\x18?X\xfc7\x00\x00\xff\xff\xd7\x97\xf3" + + "J" func init() { schemas.Register(schema_db8274f9144abc7e, 0x84cb9536a2cf6d3c, 0x8891f360e47c30d3, + 0x91f7a001ca145b9d, 0x935185ed60218ea3, - 0x984a5b060f122dd1, 0x9b87b390babc2ccf, 0xa29a916d4ebdd894, 0xa766b24d4fe5da35, 0xa78f37418c1077c8, 0xaa7386f356bd398a, - 0xabe155b01da72ed9, 0xb14ce48f4e2abb0d, 0xb167b0bebe562cd0, 0xb70431c0dc014915, - 0xbcae494a1cb9c358, + 0xb9d4ef45c2b5fc5b, 0xc082ef6e0d42ed1d, 0xc766a92976e389c4, 0xc793e50592935b4a, @@ -3172,11 +3323,12 @@ func init() { 0xdc3ed6801961e502, 0xe3e37d096a5b564e, 0xe4a6a1bc139211b4, + 0xe84e68c9403d0371, 0xea58385c65416035, + 0xf143a395ed8b3133, 0xf2c122394f447e8e, 0xf2c68e2547ec3866, 0xf41a0f001ad49e46, - 0xf548cef9dea2a4a1, 0xf9c895683ed9ac4c, 0xfeac5c8f4899ef7c, 0xff8d9848747c956a)