diff --git a/.gitignore b/.gitignore index 8aeabbddc..60a5b0af9 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,4 @@ RELEASE deb *.bz2 /repos +/proto/scripts/protoc-gen-gosyncthing diff --git a/build.go b/build.go index 49f229827..c8210a825 100644 --- a/build.go +++ b/build.go @@ -812,6 +812,7 @@ func proto() { runPrintInDir(path, "git", "checkout", dep.commit) } runPrint(goCmd, "generate", "github.com/syncthing/syncthing/lib/...", "github.com/syncthing/syncthing/cmd/stdiscosrv") + runPrint(goCmd, "generate", "proto/generate.go") } func translate() { diff --git a/cmd/stcli/main.go b/cmd/stcli/main.go index 6659c6a8f..5f4233de4 100644 --- a/cmd/stcli/main.go +++ b/cmd/stcli/main.go @@ -85,7 +85,7 @@ func main() { myID := protocol.NewDeviceID(cert.Certificate[0]) // Load the config - cfg, err := config.Load(locations.Get(locations.ConfigFile), myID, events.NoopLogger) + cfg, _, err := config.Load(locations.Get(locations.ConfigFile), myID, events.NoopLogger) if err != nil { log.Fatalln(errors.Wrap(err, "loading config")) } diff --git a/cmd/stdiscosrv/database.go b/cmd/stdiscosrv/database.go index 84a28b7ae..653681822 100644 --- a/cmd/stdiscosrv/database.go +++ b/cmd/stdiscosrv/database.go @@ -4,7 +4,7 @@ // License, v. 2.0. If a copy of the MPL was not distributed with this file, // You can obtain one at https://mozilla.org/MPL/2.0/. -//go:generate go run ../../script/protofmt.go database.proto +//go:generate go run ../../proto/scripts/protofmt.go database.proto //go:generate protoc -I ../../ -I . --gogofast_out=. database.proto package main diff --git a/cmd/syncthing/main.go b/cmd/syncthing/main.go index c65994041..8db13ff8d 100644 --- a/cmd/syncthing/main.go +++ b/cmd/syncthing/main.go @@ -748,7 +748,7 @@ func setupSignalHandling(app *syncthing.App) { func loadOrDefaultConfig(myID protocol.DeviceID, evLogger events.Logger) (config.Wrapper, error) { cfgFile := locations.Get(locations.ConfigFile) - cfg, err := config.Load(cfgFile, myID, evLogger) + cfg, _, err := config.Load(cfgFile, myID, evLogger) if err != nil { cfg, err = syncthing.DefaultConfig(cfgFile, myID, evLogger, noDefaultFolder) diff --git a/go.mod b/go.mod index b54f7581f..45c6c699d 100644 --- a/go.mod +++ b/go.mod @@ -20,6 +20,7 @@ require ( github.com/gobwas/glob v0.2.3 github.com/gogo/protobuf v1.3.1 github.com/golang/groupcache v0.0.0-20191027212112-611e8accdfc9 + github.com/golang/protobuf v1.4.2 github.com/greatroar/blobloom v0.3.0 github.com/jackpal/gateway v1.0.6 github.com/jackpal/go-nat-pmp v1.0.2 diff --git a/lib/api/mocked_config_test.go b/lib/api/mocked_config_test.go index 4ccef436c..1ac538d4b 100644 --- a/lib/api/mocked_config_test.go +++ b/lib/api/mocked_config_test.go @@ -74,10 +74,6 @@ func (c *mockedConfig) AddOrUpdatePendingDevice(device protocol.DeviceID, name, func (c *mockedConfig) AddOrUpdatePendingFolder(id, label string, device protocol.DeviceID) {} -func (c *mockedConfig) MyName() string { - return "" -} - func (c *mockedConfig) ConfigPath() string { return "" } diff --git a/lib/config/authmode.go b/lib/config/authmode.go index 55ffc9657..0a85e72c8 100644 --- a/lib/config/authmode.go +++ b/lib/config/authmode.go @@ -6,13 +6,6 @@ package config -type AuthMode int - -const ( - AuthModeStatic AuthMode = iota // default is static - AuthModeLDAP -) - func (t AuthMode) String() string { switch t { case AuthModeStatic: diff --git a/lib/config/authmode.pb.go b/lib/config/authmode.pb.go new file mode 100644 index 000000000..e4db555b7 --- /dev/null +++ b/lib/config/authmode.pb.go @@ -0,0 +1,69 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: lib/config/authmode.proto + +package config + +import ( + fmt "fmt" + _ "github.com/gogo/protobuf/gogoproto" + proto "github.com/gogo/protobuf/proto" + _ "github.com/syncthing/syncthing/proto/ext" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type AuthMode int32 + +const ( + AuthModeStatic AuthMode = 0 + AuthModeLDAP AuthMode = 1 +) + +var AuthMode_name = map[int32]string{ + 0: "AUTH_MODE_STATIC", + 1: "AUTH_MODE_LDAP", +} + +var AuthMode_value = map[string]int32{ + "AUTH_MODE_STATIC": 0, + "AUTH_MODE_LDAP": 1, +} + +func (AuthMode) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_8e30b562e1bcea1e, []int{0} +} + +func init() { + proto.RegisterEnum("config.AuthMode", AuthMode_name, AuthMode_value) +} + +func init() { proto.RegisterFile("lib/config/authmode.proto", fileDescriptor_8e30b562e1bcea1e) } + +var fileDescriptor_8e30b562e1bcea1e = []byte{ + // 230 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0xcc, 0xc9, 0x4c, 0xd2, + 0x4f, 0xce, 0xcf, 0x4b, 0xcb, 0x4c, 0xd7, 0x4f, 0x2c, 0x2d, 0xc9, 0xc8, 0xcd, 0x4f, 0x49, 0xd5, + 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x83, 0x08, 0x4b, 0x29, 0x17, 0xa5, 0x16, 0xe4, 0x17, + 0xeb, 0x83, 0x05, 0x93, 0x4a, 0xd3, 0xf4, 0xd3, 0xf3, 0xd3, 0xf3, 0xc1, 0x1c, 0x30, 0x0b, 0xa2, + 0x58, 0x8a, 0x33, 0xb5, 0xa2, 0x04, 0xc2, 0xd4, 0x2a, 0xe0, 0xe2, 0x70, 0x2c, 0x2d, 0xc9, 0xf0, + 0xcd, 0x4f, 0x49, 0x15, 0xd2, 0xe0, 0x12, 0x70, 0x0c, 0x0d, 0xf1, 0x88, 0xf7, 0xf5, 0x77, 0x71, + 0x8d, 0x0f, 0x0e, 0x71, 0x0c, 0xf1, 0x74, 0x16, 0x60, 0x90, 0x12, 0xea, 0x9a, 0xab, 0xc0, 0x07, + 0x53, 0x13, 0x5c, 0x92, 0x58, 0x92, 0x99, 0x2c, 0x64, 0xc2, 0xc5, 0x87, 0x50, 0xe9, 0xe3, 0xe2, + 0x18, 0x20, 0xc0, 0x28, 0xa5, 0xd0, 0x35, 0x57, 0x81, 0x07, 0xa6, 0x0e, 0x24, 0x76, 0xa9, 0x4f, + 0x15, 0x85, 0x2f, 0xc5, 0xb2, 0x62, 0x89, 0x1c, 0x83, 0x93, 0xfb, 0x89, 0x87, 0x72, 0x0c, 0x17, + 0x1e, 0xca, 0x31, 0xbc, 0x78, 0x24, 0xc7, 0x30, 0xe1, 0xb1, 0x1c, 0xc3, 0x82, 0xc7, 0x72, 0x8c, + 0x17, 0x1e, 0xcb, 0x31, 0xdc, 0x78, 0x2c, 0xc7, 0x10, 0xa5, 0x99, 0x9e, 0x59, 0x92, 0x51, 0x9a, + 0xa4, 0x97, 0x9c, 0x9f, 0xab, 0x5f, 0x5c, 0x99, 0x97, 0x5c, 0x92, 0x91, 0x99, 0x97, 0x8e, 0xc4, + 0x42, 0x84, 0x40, 0x12, 0x1b, 0xd8, 0x07, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x04, 0x8c, + 0xb9, 0xb3, 0x16, 0x01, 0x00, 0x00, +} diff --git a/lib/config/blockpullorder.go b/lib/config/blockpullorder.go index 03b26552a..8270c1a6b 100644 --- a/lib/config/blockpullorder.go +++ b/lib/config/blockpullorder.go @@ -6,14 +6,6 @@ package config -type BlockPullOrder int - -const ( - BlockPullOrderStandard BlockPullOrder = iota // default is standard - BlockPullOrderRandom - BlockPullOrderInOrder -) - func (o BlockPullOrder) String() string { switch o { case BlockPullOrderStandard: diff --git a/lib/config/blockpullorder.pb.go b/lib/config/blockpullorder.pb.go new file mode 100644 index 000000000..8001610fc --- /dev/null +++ b/lib/config/blockpullorder.pb.go @@ -0,0 +1,70 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: lib/config/blockpullorder.proto + +package config + +import ( + fmt "fmt" + proto "github.com/gogo/protobuf/proto" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type BlockPullOrder int32 + +const ( + BlockPullOrderStandard BlockPullOrder = 0 + BlockPullOrderRandom BlockPullOrder = 1 + BlockPullOrderInOrder BlockPullOrder = 2 +) + +var BlockPullOrder_name = map[int32]string{ + 0: "BLOCK_PULL_ORDER_STANDARD", + 1: "BLOCK_PULL_ORDER_RANDOM", + 2: "BLOCK_PULL_ORDER_IN_ORDER", +} + +var BlockPullOrder_value = map[string]int32{ + "BLOCK_PULL_ORDER_STANDARD": 0, + "BLOCK_PULL_ORDER_RANDOM": 1, + "BLOCK_PULL_ORDER_IN_ORDER": 2, +} + +func (BlockPullOrder) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_3c46a5289006da6c, []int{0} +} + +func init() { + proto.RegisterEnum("config.BlockPullOrder", BlockPullOrder_name, BlockPullOrder_value) +} + +func init() { proto.RegisterFile("lib/config/blockpullorder.proto", fileDescriptor_3c46a5289006da6c) } + +var fileDescriptor_3c46a5289006da6c = []byte{ + // 237 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0xcf, 0xc9, 0x4c, 0xd2, + 0x4f, 0xce, 0xcf, 0x4b, 0xcb, 0x4c, 0xd7, 0x4f, 0xca, 0xc9, 0x4f, 0xce, 0x2e, 0x28, 0xcd, 0xc9, + 0xc9, 0x2f, 0x4a, 0x49, 0x2d, 0xd2, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x83, 0x48, 0x6a, + 0xed, 0x61, 0xe4, 0xe2, 0x73, 0x02, 0x29, 0x08, 0x28, 0xcd, 0xc9, 0xf1, 0x07, 0x29, 0x10, 0xb2, + 0xe4, 0x92, 0x74, 0xf2, 0xf1, 0x77, 0xf6, 0x8e, 0x0f, 0x08, 0xf5, 0xf1, 0x89, 0xf7, 0x0f, 0x72, + 0x71, 0x0d, 0x8a, 0x0f, 0x0e, 0x71, 0xf4, 0x73, 0x71, 0x0c, 0x72, 0x11, 0x60, 0x90, 0x92, 0xea, + 0x9a, 0xab, 0x20, 0x86, 0xaa, 0x25, 0xb8, 0x24, 0x31, 0x2f, 0x25, 0xb1, 0x28, 0x45, 0xc8, 0x94, + 0x4b, 0x1c, 0x43, 0x6b, 0x90, 0xa3, 0x9f, 0x8b, 0xbf, 0xaf, 0x00, 0xa3, 0x94, 0x44, 0xd7, 0x5c, + 0x05, 0x11, 0x54, 0x8d, 0x41, 0x89, 0x79, 0x29, 0xf9, 0xb9, 0x42, 0x16, 0x58, 0x6c, 0xf4, 0xf4, + 0x83, 0x30, 0x04, 0x98, 0xa4, 0x24, 0xbb, 0xe6, 0x2a, 0x88, 0xa2, 0x6a, 0xf4, 0xcc, 0x03, 0x53, + 0x4e, 0xee, 0x27, 0x1e, 0xca, 0x31, 0x5c, 0x78, 0x28, 0xc7, 0xf0, 0xe2, 0x91, 0x1c, 0xc3, 0x84, + 0xc7, 0x72, 0x0c, 0x0b, 0x1e, 0xcb, 0x31, 0x5e, 0x78, 0x2c, 0xc7, 0x70, 0xe3, 0xb1, 0x1c, 0x43, + 0x94, 0x66, 0x7a, 0x66, 0x49, 0x46, 0x69, 0x92, 0x5e, 0x72, 0x7e, 0xae, 0x7e, 0x71, 0x65, 0x5e, + 0x72, 0x49, 0x46, 0x66, 0x5e, 0x3a, 0x12, 0x0b, 0x11, 0x48, 0x49, 0x6c, 0xe0, 0x60, 0x31, 0x06, + 0x04, 0x00, 0x00, 0xff, 0xff, 0x46, 0xfd, 0xeb, 0xcf, 0x39, 0x01, 0x00, 0x00, +} diff --git a/lib/config/config.go b/lib/config/config.go index f0ef83b34..c7a760daf 100644 --- a/lib/config/config.go +++ b/lib/config/config.go @@ -101,7 +101,6 @@ var ( func New(myID protocol.DeviceID) Configuration { var cfg Configuration cfg.Version = CurrentVersion - cfg.OriginalVersion = CurrentVersion cfg.Options.UnackedNotificationIDs = []string{"authenticationUserAndPassword"} @@ -144,22 +143,28 @@ func NewWithFreePorts(myID protocol.DeviceID) (Configuration, error) { return cfg, nil } -func ReadXML(r io.Reader, myID protocol.DeviceID) (Configuration, error) { - var cfg Configuration +type xmlConfiguration struct { + Configuration + XMLName xml.Name `xml:"configuration"` +} + +func ReadXML(r io.Reader, myID protocol.DeviceID) (Configuration, int, error) { + var cfg xmlConfiguration util.SetDefaults(&cfg) util.SetDefaults(&cfg.Options) util.SetDefaults(&cfg.GUI) if err := xml.NewDecoder(r).Decode(&cfg); err != nil { - return Configuration{}, err + return Configuration{}, 0, err } - cfg.OriginalVersion = cfg.Version + + originalVersion := cfg.Version if err := cfg.prepare(myID); err != nil { - return Configuration{}, err + return Configuration{}, originalVersion, err } - return cfg, nil + return cfg.Configuration, originalVersion, nil } func ReadJSON(r io.Reader, myID protocol.DeviceID) (Configuration, error) { @@ -177,7 +182,6 @@ func ReadJSON(r io.Reader, myID protocol.DeviceID) (Configuration, error) { if err := json.Unmarshal(bs, &cfg); err != nil { return Configuration{}, err } - cfg.OriginalVersion = cfg.Version if err := cfg.prepare(myID); err != nil { return Configuration{}, err @@ -185,21 +189,6 @@ func ReadJSON(r io.Reader, myID protocol.DeviceID) (Configuration, error) { return cfg, nil } -type Configuration struct { - Version int `xml:"version,attr" json:"version"` - Folders []FolderConfiguration `xml:"folder" json:"folders"` - Devices []DeviceConfiguration `xml:"device" json:"devices"` - GUI GUIConfiguration `xml:"gui" json:"gui"` - LDAP LDAPConfiguration `xml:"ldap" json:"ldap"` - Options OptionsConfiguration `xml:"options" json:"options"` - IgnoredDevices []ObservedDevice `xml:"remoteIgnoredDevice" json:"remoteIgnoredDevices"` - PendingDevices []ObservedDevice `xml:"pendingDevice" json:"pendingDevices"` - XMLName xml.Name `xml:"configuration" json:"-"` - - MyID protocol.DeviceID `xml:"-" json:"-"` // Provided by the instantiator. - OriginalVersion int `xml:"-" json:"-"` // The version we read from disk, before any conversion -} - func (cfg Configuration) Copy() Configuration { newCfg := cfg @@ -231,7 +220,8 @@ func (cfg Configuration) Copy() Configuration { func (cfg *Configuration) WriteXML(w io.Writer) error { e := xml.NewEncoder(w) e.Indent("", " ") - err := e.Encode(cfg) + xmlCfg := xmlConfiguration{Configuration: *cfg} + err := e.Encode(xmlCfg) if err != nil { return err } @@ -242,8 +232,6 @@ func (cfg *Configuration) WriteXML(w io.Writer) error { func (cfg *Configuration) prepare(myID protocol.DeviceID) error { var myName string - cfg.MyID = myID - // Ensure this device is present in the config for _, device := range cfg.Devices { if device.DeviceID == myID { diff --git a/lib/config/config.pb.go b/lib/config/config.pb.go new file mode 100644 index 000000000..f8398ad74 --- /dev/null +++ b/lib/config/config.pb.go @@ -0,0 +1,151 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: lib/config/config.proto + +package config + +import ( + fmt "fmt" + proto "github.com/gogo/protobuf/proto" + _ "github.com/syncthing/syncthing/proto/ext" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type Configuration struct { + Version int `protobuf:"varint,1,opt,name=version,proto3,casttype=int" json:"version" xml:"version,attr"` + Folders []FolderConfiguration `protobuf:"bytes,2,rep,name=folders,proto3" json:"folders" xml:"folder"` + Devices []DeviceConfiguration `protobuf:"bytes,3,rep,name=devices,proto3" json:"devices" xml:"device"` + GUI GUIConfiguration `protobuf:"bytes,4,opt,name=gui,proto3" json:"gui" xml:"gui"` + LDAP LDAPConfiguration `protobuf:"bytes,5,opt,name=ldap,proto3" json:"ldap" xml:"ldap"` + Options OptionsConfiguration `protobuf:"bytes,6,opt,name=options,proto3" json:"options" xml:"options"` + IgnoredDevices []ObservedDevice `protobuf:"bytes,7,rep,name=ignored_devices,json=ignoredDevices,proto3" json:"remoteIgnoredDevices" xml:"remoteIgnoredDevice"` + PendingDevices []ObservedDevice `protobuf:"bytes,8,rep,name=pending_devices,json=pendingDevices,proto3" json:"pendingDevices" xml:"pendingDevice"` +} + +func (m *Configuration) Reset() { *m = Configuration{} } +func (m *Configuration) String() string { return proto.CompactTextString(m) } +func (*Configuration) ProtoMessage() {} +func (*Configuration) Descriptor() ([]byte, []int) { + return fileDescriptor_baadf209193dc627, []int{0} +} +func (m *Configuration) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Configuration.Unmarshal(m, b) +} +func (m *Configuration) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Configuration.Marshal(b, m, deterministic) +} +func (m *Configuration) XXX_Merge(src proto.Message) { + xxx_messageInfo_Configuration.Merge(m, src) +} +func (m *Configuration) XXX_Size() int { + return xxx_messageInfo_Configuration.Size(m) +} +func (m *Configuration) XXX_DiscardUnknown() { + xxx_messageInfo_Configuration.DiscardUnknown(m) +} + +var xxx_messageInfo_Configuration proto.InternalMessageInfo + +func init() { + proto.RegisterType((*Configuration)(nil), "config.Configuration") +} + +func init() { proto.RegisterFile("lib/config/config.proto", fileDescriptor_baadf209193dc627) } + +var fileDescriptor_baadf209193dc627 = []byte{ + // 544 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x93, 0x4f, 0x8b, 0xd3, 0x40, + 0x18, 0xc6, 0x53, 0xdb, 0x6d, 0xdd, 0xec, 0x3f, 0xc8, 0x8a, 0xa6, 0x2a, 0x99, 0x3a, 0x54, 0xa9, + 0xa2, 0x5d, 0x58, 0x2f, 0xe2, 0xcd, 0x5a, 0x2c, 0x05, 0x41, 0x19, 0x58, 0x51, 0x2f, 0xd2, 0x36, + 0xb3, 0xe9, 0x40, 0x3b, 0x53, 0x92, 0xb4, 0xac, 0xdf, 0x42, 0xfc, 0x04, 0x5e, 0xfd, 0x06, 0x7e, + 0x84, 0xbd, 0xb5, 0x47, 0x4f, 0x03, 0xbb, 0xbd, 0x48, 0x8e, 0x39, 0x7a, 0x92, 0xf9, 0xd7, 0x4d, + 0x24, 0x7a, 0x6a, 0xde, 0xf7, 0x79, 0x9e, 0xdf, 0xfb, 0xf2, 0x36, 0xb1, 0x6f, 0x4d, 0xc8, 0xf0, + 0x68, 0xc4, 0xe8, 0x29, 0x09, 0xf4, 0x4f, 0x7b, 0x16, 0xb2, 0x98, 0x39, 0x55, 0x55, 0xdd, 0x6e, + 0x66, 0x0c, 0xa7, 0x6c, 0xe2, 0xe3, 0x50, 0x15, 0xf3, 0x70, 0x10, 0x13, 0x46, 0x95, 0x3b, 0xe7, + 0xf2, 0xf1, 0x82, 0x8c, 0x70, 0x91, 0xeb, 0x5e, 0xc6, 0x15, 0xcc, 0x49, 0x91, 0x05, 0x66, 0x2c, + 0x13, 0x7f, 0x30, 0x2b, 0xf2, 0xdc, 0xcf, 0x78, 0xd8, 0x4c, 0x08, 0x51, 0x91, 0xad, 0x9e, 0xb5, + 0x0d, 0x23, 0x1c, 0x2e, 0xb0, 0xaf, 0xa5, 0x6d, 0x7c, 0x16, 0xab, 0x47, 0xf8, 0xa3, 0x6a, 0xef, + 0xbd, 0xcc, 0xa6, 0x1d, 0x64, 0xd7, 0x16, 0x38, 0x8c, 0x08, 0xa3, 0x6e, 0xa9, 0x51, 0x6a, 0x6d, + 0x75, 0x9e, 0x25, 0x1c, 0x98, 0x56, 0xca, 0x81, 0x73, 0x36, 0x9d, 0x3c, 0x87, 0xba, 0x7e, 0x3c, + 0x88, 0xe3, 0x10, 0xfe, 0xe6, 0xa0, 0x4c, 0x68, 0x9c, 0x2c, 0x9b, 0xbb, 0xd9, 0x3e, 0x32, 0x29, + 0xe7, 0x9d, 0x5d, 0x53, 0xc7, 0x8b, 0xdc, 0x6b, 0x8d, 0x72, 0x6b, 0xe7, 0xf8, 0x4e, 0x5b, 0x5f, + 0xfb, 0x95, 0x6c, 0xe7, 0x36, 0xe8, 0x80, 0x73, 0x0e, 0x2c, 0x31, 0x54, 0x67, 0x52, 0x0e, 0x76, + 0xe5, 0x50, 0x55, 0x43, 0x64, 0x04, 0xc1, 0x55, 0xe7, 0x8e, 0xdc, 0x72, 0x9e, 0xdb, 0x95, 0xed, + 0x7f, 0x70, 0x75, 0x66, 0xc3, 0x55, 0x35, 0x44, 0x46, 0x70, 0x90, 0x5d, 0x0e, 0xe6, 0xc4, 0xad, + 0x34, 0x4a, 0xad, 0x9d, 0x63, 0xd7, 0x30, 0x7b, 0x27, 0xfd, 0x3c, 0xf0, 0x81, 0x00, 0x5e, 0x72, + 0x50, 0xee, 0x9d, 0xf4, 0x13, 0x0e, 0x44, 0x26, 0xe5, 0x60, 0x5b, 0x32, 0x83, 0x39, 0x81, 0x5f, + 0x57, 0x4d, 0x21, 0x21, 0x21, 0x38, 0x1f, 0xec, 0x8a, 0xf8, 0x47, 0xdd, 0x2d, 0x09, 0xad, 0x1b, + 0xe8, 0xeb, 0xee, 0x8b, 0xb7, 0x79, 0xea, 0x23, 0x4d, 0xad, 0x08, 0x29, 0xe1, 0x40, 0xc6, 0x52, + 0x0e, 0x6c, 0xc9, 0x15, 0x85, 0x00, 0x4b, 0x15, 0x49, 0xcd, 0x79, 0x6f, 0xd7, 0xf4, 0x8b, 0xe0, + 0x56, 0x25, 0xfd, 0xae, 0xa1, 0xbf, 0x51, 0xed, 0xfc, 0x80, 0x86, 0xb9, 0x83, 0x0e, 0xa5, 0x1c, + 0xec, 0x49, 0xb6, 0xae, 0x21, 0x32, 0x8a, 0xf3, 0xbd, 0x64, 0x1f, 0x90, 0x80, 0xb2, 0x10, 0xfb, + 0x9f, 0xcc, 0xa5, 0x6b, 0xf2, 0xd2, 0x37, 0x37, 0x23, 0xf4, 0xbb, 0xa5, 0x2e, 0xde, 0x19, 0x6b, + 0xf8, 0x8d, 0x10, 0x4f, 0x59, 0x8c, 0xfb, 0x2a, 0xdc, 0xdd, 0x5c, 0xbc, 0x2e, 0x27, 0x15, 0x88, + 0x30, 0x59, 0x36, 0x0f, 0x0b, 0xfa, 0xe9, 0xb2, 0x59, 0xc8, 0x42, 0xfb, 0x24, 0x57, 0x3b, 0xd4, + 0x3e, 0x98, 0x61, 0xea, 0x13, 0x1a, 0x6c, 0x56, 0xbd, 0xfe, 0xdf, 0x55, 0x9f, 0xe8, 0x55, 0xf7, + 0x75, 0xec, 0x6a, 0xc9, 0x43, 0xb9, 0x64, 0xae, 0x0d, 0xd1, 0x5f, 0xb6, 0x4e, 0xef, 0xfc, 0xc2, + 0xb3, 0x56, 0x17, 0x9e, 0xf5, 0xeb, 0xd2, 0xb3, 0xbe, 0xac, 0x3d, 0xeb, 0xdb, 0xda, 0x2b, 0xad, + 0xd6, 0x9e, 0xf5, 0x73, 0xed, 0x59, 0x1f, 0x1f, 0x06, 0x24, 0x1e, 0xcf, 0x87, 0xed, 0x11, 0x9b, + 0x1e, 0x45, 0x9f, 0xe9, 0x28, 0x1e, 0x13, 0x1a, 0x64, 0x9e, 0xae, 0xbe, 0xce, 0x61, 0x55, 0x7e, + 0x8a, 0x4f, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0xce, 0xc5, 0x80, 0x7a, 0x8d, 0x04, 0x00, 0x00, +} + +func (m *Configuration) ProtoSize() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Version != 0 { + n += 1 + sovConfig(uint64(m.Version)) + } + if len(m.Folders) > 0 { + for _, e := range m.Folders { + l = e.ProtoSize() + n += 1 + l + sovConfig(uint64(l)) + } + } + if len(m.Devices) > 0 { + for _, e := range m.Devices { + l = e.ProtoSize() + n += 1 + l + sovConfig(uint64(l)) + } + } + l = m.GUI.ProtoSize() + n += 1 + l + sovConfig(uint64(l)) + l = m.LDAP.ProtoSize() + n += 1 + l + sovConfig(uint64(l)) + l = m.Options.ProtoSize() + n += 1 + l + sovConfig(uint64(l)) + if len(m.IgnoredDevices) > 0 { + for _, e := range m.IgnoredDevices { + l = e.ProtoSize() + n += 1 + l + sovConfig(uint64(l)) + } + } + if len(m.PendingDevices) > 0 { + for _, e := range m.PendingDevices { + l = e.ProtoSize() + n += 1 + l + sovConfig(uint64(l)) + } + } + return n +} + +func sovConfig(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozConfig(x uint64) (n int) { + return sovConfig(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} diff --git a/lib/config/config_test.go b/lib/config/config_test.go index 5c4c84537..7873c4d49 100644 --- a/lib/config/config_test.go +++ b/lib/config/config_test.go @@ -21,6 +21,7 @@ import ( "testing" "github.com/d4l3k/messagediff" + "github.com/syncthing/syncthing/lib/events" "github.com/syncthing/syncthing/lib/fs" "github.com/syncthing/syncthing/lib/protocol" @@ -523,9 +524,6 @@ func TestNewSaveLoad(t *testing.T) { intCfg := New(device1) cfg := wrap(path, intCfg) - // To make the equality pass later - cfg.(*wrapper).cfg.XMLName.Local = "configuration" - if exists(path) { t.Error(path, "exists") } @@ -614,14 +612,14 @@ func TestPullOrder(t *testing.T) { name string order PullOrder }{ - {"f1", OrderRandom}, // empty value, default - {"f2", OrderRandom}, // explicit - {"f3", OrderAlphabetic}, // explicit - {"f4", OrderRandom}, // unknown value, default - {"f5", OrderSmallestFirst}, // explicit - {"f6", OrderLargestFirst}, // explicit - {"f7", OrderOldestFirst}, // explicit - {"f8", OrderNewestFirst}, // explicit + {"f1", PullOrderRandom}, // empty value, default + {"f2", PullOrderRandom}, // explicit + {"f3", PullOrderAlphabetic}, // explicit + {"f4", PullOrderRandom}, // unknown value, default + {"f5", PullOrderSmallestFirst}, // explicit + {"f6", PullOrderLargestFirst}, // explicit + {"f7", PullOrderOldestFirst}, // explicit + {"f8", PullOrderNewestFirst}, // explicit } // Verify values are deserialized correctly @@ -640,7 +638,7 @@ func TestPullOrder(t *testing.T) { t.Logf("%s", buf.Bytes()) - cfg, err = ReadXML(buf, device1) + cfg, _, err = ReadXML(buf, device1) if err != nil { t.Fatal(err) } @@ -1169,7 +1167,8 @@ func defaultConfigAsMap() map[string]interface{} { } func load(path string, myID protocol.DeviceID) (Wrapper, error) { - return Load(path, myID, events.NoopLogger) + cfg, _, err := Load(path, myID, events.NoopLogger) + return cfg, err } func wrap(path string, cfg Configuration) Wrapper { diff --git a/lib/config/deviceconfiguration.go b/lib/config/deviceconfiguration.go index 3a7a45100..1026aa562 100644 --- a/lib/config/deviceconfiguration.go +++ b/lib/config/deviceconfiguration.go @@ -13,25 +13,6 @@ import ( "github.com/syncthing/syncthing/lib/util" ) -type DeviceConfiguration struct { - DeviceID protocol.DeviceID `xml:"id,attr" json:"deviceID"` - Name string `xml:"name,attr,omitempty" json:"name"` - Addresses []string `xml:"address,omitempty" json:"addresses" default:"dynamic"` - Compression protocol.Compression `xml:"compression,attr" json:"compression"` - CertName string `xml:"certName,attr,omitempty" json:"certName"` - Introducer bool `xml:"introducer,attr" json:"introducer"` - SkipIntroductionRemovals bool `xml:"skipIntroductionRemovals,attr" json:"skipIntroductionRemovals"` - IntroducedBy protocol.DeviceID `xml:"introducedBy,attr" json:"introducedBy"` - Paused bool `xml:"paused" json:"paused"` - AllowedNetworks []string `xml:"allowedNetwork,omitempty" json:"allowedNetworks"` - AutoAcceptFolders bool `xml:"autoAcceptFolders" json:"autoAcceptFolders"` - MaxSendKbps int `xml:"maxSendKbps" json:"maxSendKbps"` - MaxRecvKbps int `xml:"maxRecvKbps" json:"maxRecvKbps"` - IgnoredFolders []ObservedFolder `xml:"ignoredFolder" json:"ignoredFolders"` - PendingFolders []ObservedFolder `xml:"pendingFolder" json:"pendingFolders"` - MaxRequestKiB int `xml:"maxRequestKiB" json:"maxRequestKiB"` -} - func NewDeviceConfiguration(id protocol.DeviceID, name string) DeviceConfiguration { d := DeviceConfiguration{ DeviceID: id, diff --git a/lib/config/deviceconfiguration.pb.go b/lib/config/deviceconfiguration.pb.go new file mode 100644 index 000000000..d5ca76bc0 --- /dev/null +++ b/lib/config/deviceconfiguration.pb.go @@ -0,0 +1,213 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: lib/config/deviceconfiguration.proto + +package config + +import ( + fmt "fmt" + proto "github.com/gogo/protobuf/proto" + github_com_syncthing_syncthing_lib_protocol "github.com/syncthing/syncthing/lib/protocol" + protocol "github.com/syncthing/syncthing/lib/protocol" + _ "github.com/syncthing/syncthing/proto/ext" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type DeviceConfiguration struct { + DeviceID github_com_syncthing_syncthing_lib_protocol.DeviceID `protobuf:"bytes,1,opt,name=device_id,json=deviceId,proto3,customtype=github.com/syncthing/syncthing/lib/protocol.DeviceID" json:"deviceID" xml:"id,attr"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name" xml:"name,attr,omitempty"` + Addresses []string `protobuf:"bytes,3,rep,name=addresses,proto3" json:"addresses" xml:"address,omitempty" default:"dynamic"` + Compression protocol.Compression `protobuf:"varint,4,opt,name=compression,proto3,enum=protocol.Compression" json:"compression" xml:"compression,attr"` + CertName string `protobuf:"bytes,5,opt,name=cert_name,json=certName,proto3" json:"certName" xml:"certName,attr,omitempty"` + Introducer bool `protobuf:"varint,6,opt,name=introducer,proto3" json:"introducer" xml:"introducer,attr"` + SkipIntroductionRemovals bool `protobuf:"varint,7,opt,name=skip_introduction_removals,json=skipIntroductionRemovals,proto3" json:"skipIntroductionRemovals" xml:"skipIntroductionRemovals,attr"` + IntroducedBy github_com_syncthing_syncthing_lib_protocol.DeviceID `protobuf:"bytes,8,opt,name=introduced_by,json=introducedBy,proto3,customtype=github.com/syncthing/syncthing/lib/protocol.DeviceID" json:"introducedBy" xml:"introducedBy,attr"` + Paused bool `protobuf:"varint,9,opt,name=paused,proto3" json:"paused" xml:"paused"` + AllowedNetworks []string `protobuf:"bytes,10,rep,name=allowed_networks,json=allowedNetworks,proto3" json:"allowedNetworks" xml:"allowedNetwork,omitempty"` + AutoAcceptFolders bool `protobuf:"varint,11,opt,name=auto_accept_folders,json=autoAcceptFolders,proto3" json:"autoAcceptFolders" xml:"autoAcceptFolders"` + MaxSendKbps int `protobuf:"varint,12,opt,name=max_send_kbps,json=maxSendKbps,proto3,casttype=int" json:"maxSendKbps" xml:"maxSendKbps"` + MaxRecvKbps int `protobuf:"varint,13,opt,name=max_recv_kbps,json=maxRecvKbps,proto3,casttype=int" json:"maxRecvKbps" xml:"maxRecvKbps"` + IgnoredFolders []ObservedFolder `protobuf:"bytes,14,rep,name=ignored_folders,json=ignoredFolders,proto3" json:"ignoredFolders" xml:"ignoredFolder"` + PendingFolders []ObservedFolder `protobuf:"bytes,15,rep,name=pending_folders,json=pendingFolders,proto3" json:"pendingFolders" xml:"pendingFolder"` + MaxRequestKiB int `protobuf:"varint,16,opt,name=max_request_kib,json=maxRequestKib,proto3,casttype=int" json:"maxRequestKiB" xml:"maxRequestKiB"` +} + +func (m *DeviceConfiguration) Reset() { *m = DeviceConfiguration{} } +func (m *DeviceConfiguration) String() string { return proto.CompactTextString(m) } +func (*DeviceConfiguration) ProtoMessage() {} +func (*DeviceConfiguration) Descriptor() ([]byte, []int) { + return fileDescriptor_744b782bd13071dd, []int{0} +} +func (m *DeviceConfiguration) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_DeviceConfiguration.Unmarshal(m, b) +} +func (m *DeviceConfiguration) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_DeviceConfiguration.Marshal(b, m, deterministic) +} +func (m *DeviceConfiguration) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeviceConfiguration.Merge(m, src) +} +func (m *DeviceConfiguration) XXX_Size() int { + return xxx_messageInfo_DeviceConfiguration.Size(m) +} +func (m *DeviceConfiguration) XXX_DiscardUnknown() { + xxx_messageInfo_DeviceConfiguration.DiscardUnknown(m) +} + +var xxx_messageInfo_DeviceConfiguration proto.InternalMessageInfo + +func init() { + proto.RegisterType((*DeviceConfiguration)(nil), "config.DeviceConfiguration") +} + +func init() { + proto.RegisterFile("lib/config/deviceconfiguration.proto", fileDescriptor_744b782bd13071dd) +} + +var fileDescriptor_744b782bd13071dd = []byte{ + // 900 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x55, 0x31, 0x6f, 0xdb, 0x46, + 0x18, 0x15, 0xeb, 0xc4, 0xb6, 0xce, 0x96, 0x65, 0xd3, 0x88, 0xc3, 0x18, 0x88, 0x4e, 0x60, 0x35, + 0x28, 0x68, 0x2a, 0x17, 0x6e, 0x27, 0xa3, 0x1d, 0xca, 0x04, 0x6d, 0x83, 0xa0, 0x49, 0x7b, 0xdd, + 0xbc, 0xb0, 0x24, 0xef, 0xac, 0x1c, 0x2c, 0xf2, 0x58, 0xf2, 0xa4, 0x48, 0x40, 0x87, 0x8e, 0x1d, + 0x3a, 0x14, 0x59, 0xbb, 0x14, 0x1d, 0x3a, 0xf4, 0x97, 0x04, 0xe8, 0x60, 0x8d, 0x45, 0x87, 0x03, + 0x62, 0x2f, 0x05, 0x47, 0x8e, 0x99, 0x0a, 0xde, 0x51, 0x14, 0x49, 0x47, 0x45, 0x80, 0x6e, 0x77, + 0xef, 0xbd, 0x7b, 0xef, 0xf8, 0x74, 0x1f, 0x04, 0x7a, 0x23, 0xea, 0x1e, 0x79, 0x2c, 0x38, 0xa3, + 0xc3, 0x23, 0x4c, 0x26, 0xd4, 0x23, 0x6a, 0x33, 0x8e, 0x1c, 0x4e, 0x59, 0x30, 0x08, 0x23, 0xc6, + 0x99, 0xbe, 0xae, 0xc0, 0xc3, 0x83, 0x4c, 0x2d, 0x21, 0x8f, 0x8d, 0x8e, 0x5c, 0x12, 0x2a, 0xfe, + 0xf0, 0x4e, 0xc9, 0x85, 0xb9, 0x31, 0x89, 0x26, 0x04, 0xe7, 0x54, 0x93, 0x4c, 0xb9, 0x5a, 0x9a, + 0x7f, 0xee, 0x80, 0xfd, 0x87, 0x32, 0xe3, 0x41, 0x39, 0x43, 0xff, 0x43, 0x03, 0x4d, 0x95, 0x6d, + 0x53, 0x6c, 0x68, 0x5d, 0xad, 0xbf, 0x6d, 0xfd, 0xa4, 0xbd, 0x14, 0xb0, 0xf1, 0xb7, 0x80, 0x1f, + 0x0d, 0x29, 0x7f, 0x36, 0x76, 0x07, 0x1e, 0xf3, 0x8f, 0xe2, 0x59, 0xe0, 0xf1, 0x67, 0x34, 0x18, + 0x96, 0x56, 0xe5, 0x1b, 0x0d, 0x94, 0xfb, 0xa3, 0x87, 0x97, 0x02, 0x6e, 0x2e, 0xd6, 0x89, 0x80, + 0x9b, 0x38, 0x5f, 0xa7, 0x02, 0xb6, 0xa6, 0xfe, 0xe8, 0xc4, 0xa4, 0xf8, 0xbe, 0xc3, 0x79, 0x64, + 0x26, 0x17, 0xbd, 0x8d, 0x7c, 0x9d, 0x5e, 0xf4, 0x0a, 0xdd, 0x8f, 0xf3, 0x9e, 0xf6, 0x62, 0xde, + 0x2b, 0x3c, 0xd0, 0x82, 0xc1, 0xfa, 0x57, 0xe0, 0x46, 0xe0, 0xf8, 0xc4, 0x78, 0xa7, 0xab, 0xf5, + 0x9b, 0xd6, 0xc7, 0x89, 0x80, 0x72, 0x9f, 0x0a, 0x78, 0x47, 0x3a, 0x67, 0x1b, 0xe9, 0x77, 0x9f, + 0xf9, 0x94, 0x13, 0x3f, 0xe4, 0xb3, 0x2c, 0x65, 0xff, 0x0d, 0x38, 0x92, 0x27, 0xf5, 0x29, 0x68, + 0x3a, 0x18, 0x47, 0x24, 0x8e, 0x49, 0x6c, 0xac, 0x75, 0xd7, 0xfa, 0x4d, 0xeb, 0x34, 0x11, 0x70, + 0x09, 0xa6, 0x02, 0xde, 0x93, 0xde, 0x39, 0x52, 0x72, 0xee, 0x62, 0x72, 0xe6, 0x8c, 0x47, 0xfc, + 0xc4, 0xc4, 0xb3, 0xc0, 0xf1, 0xa9, 0x97, 0x65, 0xed, 0x5d, 0xd3, 0xbd, 0xbe, 0xe8, 0x6d, 0xe4, + 0x02, 0xb4, 0xf4, 0xd5, 0x27, 0x60, 0xcb, 0x63, 0x7e, 0x98, 0xed, 0x28, 0x0b, 0x8c, 0x1b, 0x5d, + 0xad, 0xbf, 0x73, 0x7c, 0x6b, 0x50, 0xd4, 0xf9, 0x60, 0x49, 0x5a, 0x9f, 0x24, 0x02, 0x96, 0xd5, + 0xa9, 0x80, 0x07, 0xf2, 0x52, 0x25, 0xac, 0xe8, 0x74, 0xb7, 0x0e, 0xa2, 0xf2, 0x51, 0x9d, 0x80, + 0xa6, 0x47, 0x22, 0x6e, 0xcb, 0x22, 0x6f, 0xca, 0x22, 0xbf, 0xc8, 0x7e, 0xa6, 0x0c, 0x7c, 0xa2, + 0xca, 0xbc, 0xab, 0xbc, 0x73, 0xe0, 0x0d, 0x85, 0xde, 0x5e, 0xc1, 0xa1, 0xc2, 0x45, 0x3f, 0x05, + 0x80, 0x06, 0x3c, 0x62, 0x78, 0xec, 0x91, 0xc8, 0x58, 0xef, 0x6a, 0xfd, 0x4d, 0xeb, 0x24, 0x11, + 0xb0, 0x84, 0xa6, 0x02, 0xde, 0x52, 0x0f, 0xa2, 0x80, 0x8a, 0x8f, 0x68, 0xd7, 0x30, 0x54, 0x3a, + 0xa7, 0xff, 0xa6, 0x81, 0xc3, 0xf8, 0x9c, 0x86, 0xf6, 0x02, 0xcb, 0x5e, 0xb2, 0x1d, 0x11, 0x9f, + 0x4d, 0x9c, 0x51, 0x6c, 0x6c, 0xc8, 0x30, 0x9c, 0x08, 0x68, 0x64, 0xaa, 0x47, 0x25, 0x11, 0xca, + 0x35, 0xa9, 0x80, 0xef, 0xca, 0xe8, 0x55, 0x82, 0xe2, 0x22, 0x77, 0xff, 0x53, 0x81, 0x56, 0x26, + 0xe8, 0xbf, 0x6b, 0xa0, 0x55, 0xdc, 0x19, 0xdb, 0xee, 0xcc, 0xd8, 0x94, 0xc3, 0xf5, 0xc3, 0xff, + 0x1a, 0xae, 0x44, 0xc0, 0xed, 0xa5, 0xab, 0x35, 0x4b, 0x05, 0xbc, 0x5d, 0xed, 0x10, 0x5b, 0xb3, + 0xe2, 0xf2, 0x7b, 0xd7, 0xd0, 0x6c, 0xb8, 0x50, 0xc5, 0x41, 0x3f, 0x06, 0xeb, 0xa1, 0x33, 0x8e, + 0x09, 0x36, 0x9a, 0xb2, 0xb8, 0xc3, 0x44, 0xc0, 0x1c, 0x49, 0x05, 0xdc, 0x96, 0xee, 0x6a, 0x6b, + 0xa2, 0x1c, 0xd7, 0xbf, 0x07, 0xbb, 0xce, 0x68, 0xc4, 0x9e, 0x13, 0x6c, 0x07, 0x84, 0x3f, 0x67, + 0xd1, 0x79, 0x6c, 0x00, 0x39, 0x3d, 0x5f, 0x27, 0x02, 0xb6, 0x73, 0xee, 0x49, 0x4e, 0xa5, 0x02, + 0x76, 0xd4, 0x0c, 0x55, 0xf0, 0xea, 0x9b, 0x32, 0x56, 0x91, 0xa8, 0x6e, 0xa7, 0x7f, 0x0b, 0xf6, + 0x9d, 0x31, 0x67, 0xb6, 0xe3, 0x79, 0x24, 0xe4, 0xf6, 0x19, 0x1b, 0x61, 0x12, 0xc5, 0xc6, 0x96, + 0xbc, 0xfe, 0x07, 0x89, 0x80, 0x7b, 0x19, 0xfd, 0xa9, 0x64, 0x3f, 0x53, 0x64, 0xd1, 0xd3, 0x35, + 0xc6, 0x44, 0xd7, 0xd5, 0xfa, 0x53, 0xd0, 0xf2, 0x9d, 0xa9, 0x1d, 0x93, 0x00, 0xdb, 0xe7, 0x6e, + 0x18, 0x1b, 0xdb, 0x5d, 0xad, 0x7f, 0xd3, 0x7a, 0x2f, 0x9b, 0x43, 0xdf, 0x99, 0x7e, 0x43, 0x02, + 0xfc, 0xd8, 0x0d, 0x33, 0xd7, 0x3d, 0xe9, 0x5a, 0xc2, 0xcc, 0xd7, 0x02, 0xae, 0xd1, 0x80, 0xa3, + 0xb2, 0x70, 0x61, 0x18, 0x11, 0x6f, 0xa2, 0x0c, 0x5b, 0x15, 0x43, 0x44, 0xbc, 0x49, 0xdd, 0x70, + 0x81, 0x55, 0x0c, 0x17, 0xa0, 0x1e, 0x80, 0x36, 0x1d, 0x06, 0x2c, 0x22, 0xb8, 0xf8, 0xfe, 0x9d, + 0xee, 0x5a, 0x7f, 0xeb, 0xf8, 0x60, 0xa0, 0xfe, 0x0b, 0x06, 0x4f, 0xf3, 0xff, 0x02, 0xf5, 0x4d, + 0xd6, 0xfb, 0xd9, 0xb3, 0x4b, 0x04, 0xdc, 0xc9, 0x8f, 0x2d, 0x8b, 0xd9, 0x57, 0x0f, 0xa8, 0x0c, + 0x9b, 0xa8, 0x26, 0xcb, 0xf2, 0x42, 0x12, 0x60, 0x1a, 0x0c, 0x8b, 0xbc, 0xf6, 0xdb, 0xe5, 0xe5, + 0xc7, 0xea, 0x79, 0x15, 0xd8, 0x44, 0x35, 0x99, 0xfe, 0x8b, 0x06, 0xda, 0xaa, 0xb1, 0xef, 0xc6, + 0x24, 0xe6, 0xf6, 0x39, 0x75, 0x8d, 0x5d, 0xd9, 0x59, 0x7c, 0x29, 0x60, 0xeb, 0xcb, 0xac, 0x0a, + 0xc9, 0x3c, 0xa6, 0x56, 0x22, 0x60, 0xcb, 0x2f, 0x03, 0x45, 0x48, 0x05, 0x5d, 0x14, 0x99, 0x5c, + 0xf4, 0x6a, 0xf2, 0x3a, 0xf0, 0x62, 0xde, 0xab, 0x26, 0xa0, 0x0a, 0xef, 0x5a, 0x9f, 0xbf, 0x7c, + 0xd5, 0x69, 0xcc, 0x5f, 0x75, 0x1a, 0xff, 0x5c, 0x76, 0x1a, 0x3f, 0x5f, 0x75, 0x1a, 0xbf, 0x5e, + 0x75, 0xb4, 0xf9, 0x55, 0xa7, 0xf1, 0xd7, 0x55, 0xa7, 0x71, 0x7a, 0xef, 0x2d, 0x26, 0x5b, 0x95, + 0xe6, 0xae, 0xcb, 0x09, 0xff, 0xf0, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x3c, 0x69, 0xcb, 0x9f, + 0x0b, 0x08, 0x00, 0x00, +} + +func (m *DeviceConfiguration) ProtoSize() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.DeviceID.ProtoSize() + n += 1 + l + sovDeviceconfiguration(uint64(l)) + l = len(m.Name) + if l > 0 { + n += 1 + l + sovDeviceconfiguration(uint64(l)) + } + if len(m.Addresses) > 0 { + for _, s := range m.Addresses { + l = len(s) + n += 1 + l + sovDeviceconfiguration(uint64(l)) + } + } + if m.Compression != 0 { + n += 1 + sovDeviceconfiguration(uint64(m.Compression)) + } + l = len(m.CertName) + if l > 0 { + n += 1 + l + sovDeviceconfiguration(uint64(l)) + } + if m.Introducer { + n += 2 + } + if m.SkipIntroductionRemovals { + n += 2 + } + l = m.IntroducedBy.ProtoSize() + n += 1 + l + sovDeviceconfiguration(uint64(l)) + if m.Paused { + n += 2 + } + if len(m.AllowedNetworks) > 0 { + for _, s := range m.AllowedNetworks { + l = len(s) + n += 1 + l + sovDeviceconfiguration(uint64(l)) + } + } + if m.AutoAcceptFolders { + n += 2 + } + if m.MaxSendKbps != 0 { + n += 1 + sovDeviceconfiguration(uint64(m.MaxSendKbps)) + } + if m.MaxRecvKbps != 0 { + n += 1 + sovDeviceconfiguration(uint64(m.MaxRecvKbps)) + } + if len(m.IgnoredFolders) > 0 { + for _, e := range m.IgnoredFolders { + l = e.ProtoSize() + n += 1 + l + sovDeviceconfiguration(uint64(l)) + } + } + if len(m.PendingFolders) > 0 { + for _, e := range m.PendingFolders { + l = e.ProtoSize() + n += 1 + l + sovDeviceconfiguration(uint64(l)) + } + } + if m.MaxRequestKiB != 0 { + n += 2 + sovDeviceconfiguration(uint64(m.MaxRequestKiB)) + } + return n +} + +func sovDeviceconfiguration(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozDeviceconfiguration(x uint64) (n int) { + return sovDeviceconfiguration(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} diff --git a/lib/config/folderconfiguration.go b/lib/config/folderconfiguration.go index 3dd8414af..a00c8876c 100644 --- a/lib/config/folderconfiguration.go +++ b/lib/config/folderconfiguration.go @@ -28,54 +28,6 @@ var ( const DefaultMarkerName = ".stfolder" -type FolderConfiguration struct { - ID string `xml:"id,attr" json:"id"` - Label string `xml:"label,attr" json:"label" restart:"false"` - FilesystemType fs.FilesystemType `xml:"filesystemType" json:"filesystemType"` - Path string `xml:"path,attr" json:"path"` - Type FolderType `xml:"type,attr" json:"type"` - Devices []FolderDeviceConfiguration `xml:"device" json:"devices"` - RescanIntervalS int `xml:"rescanIntervalS,attr" json:"rescanIntervalS" default:"3600"` - FSWatcherEnabled bool `xml:"fsWatcherEnabled,attr" json:"fsWatcherEnabled" default:"true"` - FSWatcherDelayS int `xml:"fsWatcherDelayS,attr" json:"fsWatcherDelayS" default:"10"` - IgnorePerms bool `xml:"ignorePerms,attr" json:"ignorePerms"` - AutoNormalize bool `xml:"autoNormalize,attr" json:"autoNormalize" default:"true"` - MinDiskFree Size `xml:"minDiskFree" json:"minDiskFree" default:"1%"` - Versioning VersioningConfiguration `xml:"versioning" json:"versioning"` - Copiers int `xml:"copiers" json:"copiers"` // This defines how many files are handled concurrently. - PullerMaxPendingKiB int `xml:"pullerMaxPendingKiB" json:"pullerMaxPendingKiB"` - Hashers int `xml:"hashers" json:"hashers"` // Less than one sets the value to the number of cores. These are CPU bound due to hashing. - Order PullOrder `xml:"order" json:"order"` - IgnoreDelete bool `xml:"ignoreDelete" json:"ignoreDelete"` - ScanProgressIntervalS int `xml:"scanProgressIntervalS" json:"scanProgressIntervalS"` // Set to a negative value to disable. Value of 0 will get replaced with value of 2 (default value) - PullerPauseS int `xml:"pullerPauseS" json:"pullerPauseS"` - MaxConflicts int `xml:"maxConflicts" json:"maxConflicts" default:"-1"` - DisableSparseFiles bool `xml:"disableSparseFiles" json:"disableSparseFiles"` - DisableTempIndexes bool `xml:"disableTempIndexes" json:"disableTempIndexes"` - Paused bool `xml:"paused" json:"paused"` - WeakHashThresholdPct int `xml:"weakHashThresholdPct" json:"weakHashThresholdPct"` // Use weak hash if more than X percent of the file has changed. Set to -1 to always use weak hash. - MarkerName string `xml:"markerName" json:"markerName"` - CopyOwnershipFromParent bool `xml:"copyOwnershipFromParent" json:"copyOwnershipFromParent"` - RawModTimeWindowS int `xml:"modTimeWindowS" json:"modTimeWindowS"` - MaxConcurrentWrites int `xml:"maxConcurrentWrites" json:"maxConcurrentWrites" default:"2"` - DisableFsync bool `xml:"disableFsync" json:"disableFsync"` - BlockPullOrder BlockPullOrder `xml:"blockPullOrder" json:"blockPullOrder"` - CopyRangeMethod fs.CopyRangeMethod `xml:"copyRangeMethod" json:"copyRangeMethod" default:"standard"` - CaseSensitiveFS bool `xml:"caseSensitiveFS" json:"caseSensitiveFS"` - JunctionsAsDirs bool `xml:"junctionsAsDirs" json:"junctionsAsDirs"` - - cachedModTimeWindow time.Duration - - DeprecatedReadOnly bool `xml:"ro,attr,omitempty" json:"-"` - DeprecatedMinDiskFreePct float64 `xml:"minDiskFreePct,omitempty" json:"-"` - DeprecatedPullers int `xml:"pullers,omitempty" json:"-"` -} - -type FolderDeviceConfiguration struct { - DeviceID protocol.DeviceID `xml:"id,attr" json:"deviceID"` - IntroducedBy protocol.DeviceID `xml:"introducedBy,attr" json:"introducedBy"` -} - func NewFolderConfiguration(myID protocol.DeviceID, id, label string, fsType fs.FilesystemType, path string) FolderConfiguration { f := FolderConfiguration{ ID: id, @@ -114,7 +66,19 @@ func (f FolderConfiguration) Filesystem() fs.Filesystem { } func (f FolderConfiguration) ModTimeWindow() time.Duration { - return f.cachedModTimeWindow + dur := time.Duration(f.RawModTimeWindowS) * time.Second + if f.RawModTimeWindowS < 1 && runtime.GOOS == "android" { + if usage, err := disk.Usage(f.Filesystem().URI()); err != nil { + dur = 2 * time.Second + l.Debugf(`Detecting FS at "%v" on android: Setting mtime window to 2s: err == "%v"`, f.Path, err) + } else if usage.Fstype == "" || strings.Contains(strings.ToLower(usage.Fstype), "fat") { + dur = 2 * time.Second + l.Debugf(`Detecting FS at "%v" on android: Setting mtime window to 2s: usage.Fstype == "%v"`, f.Path, usage.Fstype) + } else { + l.Debugf(`Detecting FS at %v on android: Leaving mtime window at 0: usage.Fstype == "%v"`, f.Path, usage.Fstype) + } + } + return dur } func (f *FolderConfiguration) CreateMarker() error { @@ -242,21 +206,6 @@ func (f *FolderConfiguration) prepare() { if f.MarkerName == "" { f.MarkerName = DefaultMarkerName } - - switch { - case f.RawModTimeWindowS > 0: - f.cachedModTimeWindow = time.Duration(f.RawModTimeWindowS) * time.Second - case runtime.GOOS == "android": - if usage, err := disk.Usage(f.Filesystem().URI()); err != nil { - f.cachedModTimeWindow = 2 * time.Second - l.Debugf(`Detecting FS at "%v" on android: Setting mtime window to 2s: err == "%v"`, f.Path, err) - } else if usage.Fstype == "" || strings.Contains(strings.ToLower(usage.Fstype), "fat") { - f.cachedModTimeWindow = 2 * time.Second - l.Debugf(`Detecting FS at "%v" on android: Setting mtime window to 2s: usage.Fstype == "%v"`, f.Path, usage.Fstype) - } else { - l.Debugf(`Detecting FS at %v on android: Leaving mtime window at 0: usage.Fstype == "%v"`, f.Path, usage.Fstype) - } - } } // RequiresRestartOnly returns a copy with only the attributes that require diff --git a/lib/config/folderconfiguration.pb.go b/lib/config/folderconfiguration.pb.go new file mode 100644 index 000000000..c801b2a5f --- /dev/null +++ b/lib/config/folderconfiguration.pb.go @@ -0,0 +1,401 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: lib/config/folderconfiguration.proto + +package config + +import ( + fmt "fmt" + proto "github.com/gogo/protobuf/proto" + fs "github.com/syncthing/syncthing/lib/fs" + github_com_syncthing_syncthing_lib_protocol "github.com/syncthing/syncthing/lib/protocol" + _ "github.com/syncthing/syncthing/proto/ext" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type FolderDeviceConfiguration struct { + DeviceID github_com_syncthing_syncthing_lib_protocol.DeviceID `protobuf:"bytes,1,opt,name=device_id,json=deviceId,proto3,customtype=github.com/syncthing/syncthing/lib/protocol.DeviceID" json:"deviceID" xml:"id,attr"` + IntroducedBy github_com_syncthing_syncthing_lib_protocol.DeviceID `protobuf:"bytes,2,opt,name=introduced_by,json=introducedBy,proto3,customtype=github.com/syncthing/syncthing/lib/protocol.DeviceID" json:"introducedBy" xml:"introducedBy,attr"` +} + +func (m *FolderDeviceConfiguration) Reset() { *m = FolderDeviceConfiguration{} } +func (m *FolderDeviceConfiguration) String() string { return proto.CompactTextString(m) } +func (*FolderDeviceConfiguration) ProtoMessage() {} +func (*FolderDeviceConfiguration) Descriptor() ([]byte, []int) { + return fileDescriptor_44a9785876ed3afa, []int{0} +} +func (m *FolderDeviceConfiguration) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_FolderDeviceConfiguration.Unmarshal(m, b) +} +func (m *FolderDeviceConfiguration) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_FolderDeviceConfiguration.Marshal(b, m, deterministic) +} +func (m *FolderDeviceConfiguration) XXX_Merge(src proto.Message) { + xxx_messageInfo_FolderDeviceConfiguration.Merge(m, src) +} +func (m *FolderDeviceConfiguration) XXX_Size() int { + return xxx_messageInfo_FolderDeviceConfiguration.Size(m) +} +func (m *FolderDeviceConfiguration) XXX_DiscardUnknown() { + xxx_messageInfo_FolderDeviceConfiguration.DiscardUnknown(m) +} + +var xxx_messageInfo_FolderDeviceConfiguration proto.InternalMessageInfo + +type FolderConfiguration struct { + ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id" xml:"id,attr"` + Label string `protobuf:"bytes,2,opt,name=label,proto3" json:"label" xml:"label,attr" restart:"false"` + FilesystemType fs.FilesystemType `protobuf:"varint,3,opt,name=filesystem_type,json=filesystemType,proto3,enum=fs.FilesystemType" json:"filesystemType" xml:"filesystemType"` + Path string `protobuf:"bytes,4,opt,name=path,proto3" json:"path" xml:"path,attr"` + Type FolderType `protobuf:"varint,5,opt,name=type,proto3,enum=config.FolderType" json:"type" xml:"type,attr"` + Devices []FolderDeviceConfiguration `protobuf:"bytes,6,rep,name=devices,proto3" json:"devices" xml:"device"` + RescanIntervalS int `protobuf:"varint,7,opt,name=rescan_interval_s,json=rescanIntervalS,proto3,casttype=int" json:"rescanIntervalS" xml:"rescanIntervalS,attr" default:"3600"` + FSWatcherEnabled bool `protobuf:"varint,8,opt,name=fs_watcher_enabled,json=fsWatcherEnabled,proto3" json:"fsWatcherEnabled" xml:"fsWatcherEnabled,attr" default:"true"` + FSWatcherDelayS int `protobuf:"varint,9,opt,name=fs_watcher_delay_s,json=fsWatcherDelayS,proto3,casttype=int" json:"fsWatcherDelayS" xml:"fsWatcherDelayS,attr" default:"10"` + IgnorePerms bool `protobuf:"varint,10,opt,name=ignore_perms,json=ignorePerms,proto3" json:"ignorePerms" xml:"ignorePerms,attr"` + AutoNormalize bool `protobuf:"varint,11,opt,name=auto_normalize,json=autoNormalize,proto3" json:"autoNormalize" xml:"autoNormalize,attr" default:"true"` + MinDiskFree Size `protobuf:"bytes,12,opt,name=min_disk_free,json=minDiskFree,proto3" json:"minDiskFree" xml:"minDiskFree"` + Versioning VersioningConfiguration `protobuf:"bytes,13,opt,name=versioning,proto3" json:"versioning" xml:"versioning"` + Copiers int `protobuf:"varint,14,opt,name=copiers,proto3,casttype=int" json:"copiers" xml:"copiers"` + PullerMaxPendingKiB int `protobuf:"varint,15,opt,name=puller_max_pending_kib,json=pullerMaxPendingKib,proto3,casttype=int" json:"pullerMaxPendingKiB" xml:"pullerMaxPendingKiB"` + Hashers int `protobuf:"varint,16,opt,name=hashers,proto3,casttype=int" json:"hashers" xml:"hashers"` + Order PullOrder `protobuf:"varint,17,opt,name=order,proto3,enum=config.PullOrder" json:"order" xml:"order"` + IgnoreDelete bool `protobuf:"varint,18,opt,name=ignore_delete,json=ignoreDelete,proto3" json:"ignoreDelete" xml:"ignoreDelete"` + ScanProgressIntervalS int `protobuf:"varint,19,opt,name=scan_progress_interval_s,json=scanProgressIntervalS,proto3,casttype=int" json:"scanProgressIntervalS" xml:"scanProgressIntervalS"` + PullerPauseS int `protobuf:"varint,20,opt,name=puller_pause_s,json=pullerPauseS,proto3,casttype=int" json:"pullerPauseS" xml:"pullerPauseS"` + MaxConflicts int `protobuf:"varint,21,opt,name=max_conflicts,json=maxConflicts,proto3,casttype=int" json:"maxConflicts" xml:"maxConflicts" default:"-1"` + DisableSparseFiles bool `protobuf:"varint,22,opt,name=disable_sparse_files,json=disableSparseFiles,proto3" json:"disableSparseFiles" xml:"disableSparseFiles"` + DisableTempIndexes bool `protobuf:"varint,23,opt,name=disable_temp_indexes,json=disableTempIndexes,proto3" json:"disableTempIndexes" xml:"disableTempIndexes"` + Paused bool `protobuf:"varint,24,opt,name=paused,proto3" json:"paused" xml:"paused"` + WeakHashThresholdPct int `protobuf:"varint,25,opt,name=weak_hash_threshold_pct,json=weakHashThresholdPct,proto3,casttype=int" json:"weakHashThresholdPct" xml:"weakHashThresholdPct"` + MarkerName string `protobuf:"bytes,26,opt,name=marker_name,json=markerName,proto3" json:"markerName" xml:"markerName"` + CopyOwnershipFromParent bool `protobuf:"varint,27,opt,name=copy_ownership_from_parent,json=copyOwnershipFromParent,proto3" json:"copyOwnershipFromParent" xml:"copyOwnershipFromParent"` + RawModTimeWindowS int `protobuf:"varint,28,opt,name=mod_time_window_s,json=modTimeWindowS,proto3,casttype=int" json:"modTimeWindowS" xml:"modTimeWindowS"` + MaxConcurrentWrites int `protobuf:"varint,29,opt,name=max_concurrent_writes,json=maxConcurrentWrites,proto3,casttype=int" json:"maxConcurrentWrites" xml:"maxConcurrentWrites" default:"2"` + DisableFsync bool `protobuf:"varint,30,opt,name=disable_fsync,json=disableFsync,proto3" json:"disableFsync" xml:"disableFsync"` + BlockPullOrder BlockPullOrder `protobuf:"varint,31,opt,name=block_pull_order,json=blockPullOrder,proto3,enum=config.BlockPullOrder" json:"blockPullOrder" xml:"blockPullOrder"` + CopyRangeMethod fs.CopyRangeMethod `protobuf:"varint,32,opt,name=copy_range_method,json=copyRangeMethod,proto3,enum=fs.CopyRangeMethod" json:"copyRangeMethod" xml:"copyRangeMethod" default:"standard"` + CaseSensitiveFS bool `protobuf:"varint,33,opt,name=case_sensitive_fs,json=caseSensitiveFs,proto3" json:"caseSensitiveFS" xml:"caseSensitiveFS"` + JunctionsAsDirs bool `protobuf:"varint,34,opt,name=follow_junctions,json=followJunctions,proto3" json:"junctionsAsDirs" xml:"junctionsAsDirs"` + // Legacy deprecated + DeprecatedReadOnly bool `protobuf:"varint,9000,opt,name=read_only,json=readOnly,proto3" json:"-" xml:"ro,attr,omitempty"` // Deprecated: Do not use. + DeprecatedMinDiskFreePct float64 `protobuf:"fixed64,9001,opt,name=min_disk_free_pct,json=minDiskFreePct,proto3" json:"-" xml:"minDiskFreePct,omitempty"` // Deprecated: Do not use. + DeprecatedPullers int `protobuf:"varint,9002,opt,name=pullers,proto3,casttype=int" json:"-" xml:"pullers,omitempty"` // Deprecated: Do not use. +} + +func (m *FolderConfiguration) Reset() { *m = FolderConfiguration{} } +func (m *FolderConfiguration) String() string { return proto.CompactTextString(m) } +func (*FolderConfiguration) ProtoMessage() {} +func (*FolderConfiguration) Descriptor() ([]byte, []int) { + return fileDescriptor_44a9785876ed3afa, []int{1} +} +func (m *FolderConfiguration) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_FolderConfiguration.Unmarshal(m, b) +} +func (m *FolderConfiguration) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_FolderConfiguration.Marshal(b, m, deterministic) +} +func (m *FolderConfiguration) XXX_Merge(src proto.Message) { + xxx_messageInfo_FolderConfiguration.Merge(m, src) +} +func (m *FolderConfiguration) XXX_Size() int { + return xxx_messageInfo_FolderConfiguration.Size(m) +} +func (m *FolderConfiguration) XXX_DiscardUnknown() { + xxx_messageInfo_FolderConfiguration.DiscardUnknown(m) +} + +var xxx_messageInfo_FolderConfiguration proto.InternalMessageInfo + +func init() { + proto.RegisterType((*FolderDeviceConfiguration)(nil), "config.FolderDeviceConfiguration") + proto.RegisterType((*FolderConfiguration)(nil), "config.FolderConfiguration") +} + +func init() { + proto.RegisterFile("lib/config/folderconfiguration.proto", fileDescriptor_44a9785876ed3afa) +} + +var fileDescriptor_44a9785876ed3afa = []byte{ + // 1981 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x58, 0xcd, 0x8f, 0x1c, 0x47, + 0x15, 0xdf, 0x5e, 0x7f, 0xed, 0xd6, 0x7e, 0x97, 0xbd, 0x76, 0x79, 0x9d, 0x6c, 0x6d, 0x9a, 0x21, + 0x6c, 0xa2, 0x78, 0x6d, 0x6f, 0x10, 0x07, 0x2b, 0x09, 0x64, 0xbc, 0x59, 0x30, 0xc6, 0xf1, 0xa8, + 0xd7, 0x60, 0x61, 0x90, 0x9a, 0x9e, 0xee, 0x9a, 0x99, 0xca, 0xf6, 0x17, 0x55, 0x3d, 0xde, 0x1d, + 0x9f, 0xcc, 0x05, 0x81, 0xc8, 0x01, 0x2d, 0x07, 0xae, 0x48, 0x20, 0x04, 0xf9, 0x07, 0x90, 0xf8, + 0x0b, 0x72, 0x41, 0x3b, 0x47, 0xc4, 0xa1, 0xa4, 0xac, 0x2f, 0x68, 0x6e, 0xf4, 0xd1, 0x27, 0x54, + 0x55, 0xdd, 0x3d, 0xdd, 0x3d, 0x13, 0x84, 0x94, 0xdb, 0xd4, 0xef, 0xf7, 0xab, 0xf7, 0x5e, 0xbf, + 0x7e, 0xef, 0x55, 0xf5, 0x80, 0x86, 0x4f, 0xdb, 0xb7, 0xdc, 0x28, 0xec, 0xd0, 0xee, 0xad, 0x4e, + 0xe4, 0x7b, 0x84, 0xe9, 0x45, 0x9f, 0x39, 0x09, 0x8d, 0xc2, 0x9d, 0x98, 0x45, 0x49, 0x04, 0x2f, + 0x6a, 0x70, 0xe3, 0xc6, 0x84, 0x3a, 0x19, 0xc4, 0x44, 0x8b, 0x36, 0xd6, 0x4b, 0x24, 0xa7, 0xcf, + 0x73, 0x78, 0xa3, 0x04, 0xc7, 0x7d, 0xdf, 0x8f, 0x98, 0x47, 0x58, 0xc6, 0x6d, 0x97, 0xb8, 0x67, + 0x84, 0x71, 0x1a, 0x85, 0x34, 0xec, 0x4e, 0x89, 0x60, 0x03, 0x97, 0x94, 0x6d, 0x3f, 0x72, 0x0f, + 0xeb, 0xa6, 0xa0, 0x14, 0x74, 0xf8, 0x2d, 0x19, 0x10, 0xcf, 0xb0, 0xd7, 0x32, 0xcc, 0x8d, 0xe2, + 0x01, 0x73, 0xc2, 0x2e, 0x09, 0x48, 0xd2, 0x8b, 0xbc, 0x8c, 0x9d, 0x27, 0xc7, 0x89, 0xfe, 0x69, + 0xfe, 0x67, 0x16, 0x5c, 0xdf, 0x57, 0xcf, 0xb3, 0x47, 0x9e, 0x51, 0x97, 0xdc, 0x2b, 0x47, 0x00, + 0x3f, 0x33, 0xc0, 0xbc, 0xa7, 0x70, 0x9b, 0x7a, 0xc8, 0xd8, 0x32, 0xb6, 0x17, 0x9b, 0x9f, 0x1a, + 0x9f, 0x0b, 0x3c, 0xf3, 0x2f, 0x81, 0xbf, 0xd9, 0xa5, 0x49, 0xaf, 0xdf, 0xde, 0x71, 0xa3, 0xe0, + 0x16, 0x1f, 0x84, 0x6e, 0xd2, 0xa3, 0x61, 0xb7, 0xf4, 0x4b, 0x86, 0xa0, 0x9c, 0xb8, 0x91, 0xbf, + 0xa3, 0xad, 0xdf, 0xdf, 0x3b, 0x13, 0x78, 0x2e, 0xff, 0x3d, 0x12, 0x78, 0xce, 0xcb, 0x7e, 0xa7, + 0x02, 0x2f, 0x1d, 0x07, 0xfe, 0x5d, 0x93, 0x7a, 0xef, 0x38, 0x49, 0xc2, 0xcc, 0xd1, 0x69, 0xe3, + 0x52, 0xf6, 0x3b, 0x3d, 0x6d, 0x14, 0xba, 0x5f, 0x0d, 0x1b, 0xc6, 0xc9, 0xb0, 0x51, 0xd8, 0xb0, + 0x72, 0xc6, 0x83, 0x7f, 0x36, 0xc0, 0x12, 0x0d, 0x13, 0x16, 0x79, 0x7d, 0x97, 0x78, 0x76, 0x7b, + 0x80, 0x66, 0x55, 0xc0, 0x2f, 0xbe, 0x52, 0xc0, 0x23, 0x81, 0x17, 0xc7, 0x56, 0x9b, 0x83, 0x54, + 0xe0, 0x6b, 0x3a, 0xd0, 0x12, 0x58, 0x84, 0xbc, 0x36, 0x81, 0xca, 0x80, 0xad, 0x8a, 0x05, 0xf3, + 0x25, 0x06, 0x97, 0x75, 0xce, 0xab, 0xd9, 0xfe, 0x00, 0xcc, 0x66, 0x59, 0x9e, 0x6f, 0xee, 0x9c, + 0x09, 0x3c, 0xab, 0xbc, 0xcf, 0x52, 0xef, 0x7f, 0x25, 0xe7, 0x64, 0xd8, 0x98, 0xbd, 0xbf, 0x67, + 0xcd, 0x52, 0x0f, 0xfe, 0x10, 0x5c, 0xf0, 0x9d, 0x36, 0xf1, 0xd5, 0x73, 0xcf, 0x37, 0xbf, 0x3d, + 0x12, 0x58, 0x03, 0xa9, 0xc0, 0x5b, 0x6a, 0xbf, 0x5a, 0x69, 0x13, 0x5b, 0x8c, 0xf0, 0xc4, 0x61, + 0xc9, 0x5d, 0xb3, 0xe3, 0xf8, 0x9c, 0x48, 0x93, 0x60, 0x4c, 0xbf, 0x18, 0x36, 0x66, 0x2c, 0xbd, + 0x19, 0x76, 0xc1, 0x4a, 0x87, 0xfa, 0x84, 0x0f, 0x78, 0x42, 0x02, 0x5b, 0x56, 0x19, 0x3a, 0xb7, + 0x65, 0x6c, 0x2f, 0xef, 0xc2, 0x9d, 0x0e, 0xdf, 0xd9, 0x2f, 0xa8, 0xc7, 0x83, 0x98, 0x34, 0xdf, + 0x1e, 0x09, 0xbc, 0xdc, 0xa9, 0x60, 0xa9, 0xc0, 0x57, 0x94, 0xf7, 0x2a, 0x6c, 0x5a, 0x35, 0x1d, + 0x7c, 0x0f, 0x9c, 0x8f, 0x9d, 0xa4, 0x87, 0xce, 0xab, 0xf0, 0xb7, 0x47, 0x02, 0xab, 0x75, 0x2a, + 0xf0, 0x8a, 0xda, 0x2f, 0x17, 0xc5, 0xf3, 0xcf, 0x17, 0x2b, 0x4b, 0xa9, 0x60, 0x0b, 0x9c, 0x57, + 0xb1, 0x5d, 0xc8, 0x62, 0xd3, 0x2d, 0xb3, 0xa3, 0x13, 0xad, 0x62, 0x53, 0x16, 0x13, 0x1d, 0x91, + 0xb6, 0x28, 0x17, 0x63, 0x8b, 0xc5, 0xca, 0x52, 0x2a, 0xf8, 0x53, 0x70, 0x49, 0x17, 0x17, 0x47, + 0x17, 0xb7, 0xce, 0x6d, 0x2f, 0xec, 0xbe, 0x51, 0x35, 0x3a, 0xa5, 0x63, 0x9a, 0x58, 0xd6, 0xda, + 0x48, 0xe0, 0x7c, 0x67, 0x2a, 0xf0, 0xa2, 0x72, 0xa5, 0xd7, 0xa6, 0x95, 0x13, 0xf0, 0x77, 0x06, + 0x58, 0x63, 0x84, 0xbb, 0x4e, 0x68, 0xd3, 0x30, 0x21, 0xec, 0x99, 0xe3, 0xdb, 0x1c, 0x5d, 0xda, + 0x32, 0xb6, 0x2f, 0x34, 0xbb, 0x23, 0x81, 0x57, 0x34, 0x79, 0x3f, 0xe3, 0x0e, 0x52, 0x81, 0xdf, + 0x52, 0x96, 0x6a, 0x78, 0xf6, 0x3a, 0x3d, 0xd2, 0x71, 0xfa, 0x7e, 0x72, 0xd7, 0x7c, 0xf7, 0x5b, + 0xb7, 0x6f, 0x9b, 0xaf, 0x04, 0x3e, 0x47, 0xc3, 0x64, 0x74, 0xda, 0xb8, 0x32, 0x4d, 0xfe, 0xea, + 0xb4, 0x71, 0x5e, 0xea, 0xac, 0xba, 0x13, 0xf8, 0x77, 0x03, 0xc0, 0x0e, 0xb7, 0x8f, 0x9c, 0xc4, + 0xed, 0x11, 0x66, 0x93, 0xd0, 0x69, 0xfb, 0xc4, 0x43, 0x73, 0x5b, 0xc6, 0xf6, 0x5c, 0xf3, 0x37, + 0xc6, 0x99, 0xc0, 0xab, 0xfb, 0x07, 0x4f, 0x34, 0xfb, 0x91, 0x26, 0x47, 0x02, 0xaf, 0x76, 0x78, + 0x15, 0x4b, 0x05, 0x7e, 0x5b, 0xbf, 0xf3, 0x1a, 0x51, 0x8f, 0x36, 0x61, 0x7d, 0x55, 0x7b, 0xeb, + 0x53, 0x85, 0x32, 0x4e, 0xa9, 0x38, 0x19, 0x36, 0x26, 0xdc, 0x5a, 0x13, 0x4e, 0xe1, 0xdf, 0xaa, + 0xc1, 0x7b, 0xc4, 0x77, 0x06, 0x36, 0x47, 0xf3, 0x2a, 0xa7, 0xbf, 0x96, 0xc1, 0xaf, 0x14, 0x56, + 0xf6, 0x24, 0x79, 0x20, 0xf3, 0x5c, 0x98, 0xd1, 0x50, 0x2a, 0xf0, 0x37, 0xaa, 0xa1, 0x6b, 0xbc, + 0x1e, 0xf9, 0x9d, 0x4a, 0x96, 0xa7, 0x89, 0x5f, 0x9d, 0x36, 0x66, 0xef, 0xdc, 0x3e, 0x19, 0x36, + 0xea, 0x5e, 0xad, 0xba, 0x4f, 0xf8, 0x33, 0xb0, 0x48, 0xbb, 0x61, 0xc4, 0x88, 0x1d, 0x13, 0x16, + 0x70, 0x04, 0x54, 0xbe, 0xdf, 0x1f, 0x09, 0xbc, 0xa0, 0xf1, 0x96, 0x84, 0x53, 0x81, 0xaf, 0xea, + 0x39, 0x30, 0xc6, 0x8a, 0xf2, 0x5d, 0xad, 0x83, 0x56, 0x79, 0x2b, 0xfc, 0x85, 0x01, 0x96, 0x9d, + 0x7e, 0x12, 0xd9, 0x61, 0xc4, 0x02, 0xc7, 0xa7, 0xcf, 0x09, 0x5a, 0x50, 0x4e, 0x9e, 0x8e, 0x04, + 0x5e, 0x92, 0xcc, 0xc7, 0x39, 0x51, 0x64, 0xa0, 0x82, 0x7e, 0xd9, 0x9b, 0x83, 0x93, 0xaa, 0xfc, + 0xb5, 0x59, 0x55, 0xbb, 0xf0, 0x29, 0x58, 0x0a, 0x68, 0x68, 0x7b, 0x94, 0x1f, 0xda, 0x1d, 0x46, + 0x08, 0x5a, 0xdc, 0x32, 0xb6, 0x17, 0x76, 0x17, 0xf3, 0xb6, 0x3a, 0xa0, 0xcf, 0x49, 0x73, 0x3b, + 0xeb, 0xa0, 0x85, 0x80, 0x86, 0x7b, 0x94, 0x1f, 0xee, 0x33, 0x22, 0x23, 0x5a, 0x53, 0x11, 0x95, + 0x30, 0xd3, 0x2a, 0x2b, 0x60, 0x17, 0x80, 0xf1, 0x39, 0x8a, 0x96, 0x94, 0x61, 0x9c, 0x1b, 0xfe, + 0x51, 0xc1, 0x54, 0xbb, 0xf5, 0xcd, 0xcc, 0x57, 0x69, 0x6b, 0x2a, 0xf0, 0xaa, 0x72, 0x35, 0x86, + 0x4c, 0xab, 0xc4, 0xc3, 0xf7, 0xc1, 0x25, 0x37, 0x8a, 0x29, 0x61, 0x1c, 0x2d, 0xab, 0xc2, 0xfa, + 0x9a, 0x6c, 0xf7, 0x0c, 0x2a, 0x26, 0x75, 0xb6, 0xce, 0x4b, 0xc4, 0xca, 0x05, 0xf0, 0x1f, 0x06, + 0xb8, 0x2a, 0x4f, 0x70, 0xc2, 0xec, 0xc0, 0x39, 0xb6, 0x63, 0x12, 0x7a, 0x34, 0xec, 0xda, 0x87, + 0xb4, 0x8d, 0x56, 0x94, 0xb9, 0xdf, 0xcb, 0x3a, 0xbd, 0xdc, 0x52, 0x92, 0x87, 0xce, 0x71, 0x4b, + 0x0b, 0x1e, 0xd0, 0xe6, 0x48, 0xe0, 0xcb, 0xf1, 0x24, 0x9c, 0x0a, 0x7c, 0x5d, 0x8f, 0xc7, 0x49, + 0xae, 0x54, 0xa1, 0x53, 0xb7, 0x4e, 0x87, 0x4f, 0x86, 0x8d, 0x69, 0xfe, 0xad, 0x29, 0xda, 0xb6, + 0x4c, 0x47, 0xcf, 0xe1, 0x3d, 0x99, 0x8e, 0xd5, 0x71, 0x3a, 0x32, 0xa8, 0x48, 0x47, 0xb6, 0x1e, + 0xa7, 0x23, 0x03, 0xe0, 0x87, 0xe0, 0x82, 0xba, 0xcb, 0xa0, 0x35, 0x35, 0xb6, 0xd7, 0xf2, 0x37, + 0x26, 0xfd, 0x3f, 0x92, 0x44, 0x13, 0xc9, 0x63, 0x4c, 0x69, 0x52, 0x81, 0x17, 0x94, 0x35, 0xb5, + 0x32, 0x2d, 0x8d, 0xc2, 0x07, 0x60, 0x29, 0xeb, 0x1d, 0x8f, 0xf8, 0x24, 0x21, 0x08, 0xaa, 0xba, + 0x7e, 0x53, 0x9d, 0xdc, 0x8a, 0xd8, 0x53, 0x78, 0x2a, 0x30, 0x2c, 0x75, 0x8f, 0x06, 0x4d, 0xab, + 0xa2, 0x81, 0xc7, 0x00, 0xa9, 0x91, 0x1c, 0xb3, 0xa8, 0xcb, 0x08, 0xe7, 0xe5, 0xd9, 0x7c, 0x59, + 0x3d, 0x9f, 0x3c, 0x56, 0xd7, 0xa5, 0xa6, 0x95, 0x49, 0xca, 0x13, 0xfa, 0x86, 0x72, 0x30, 0x95, + 0x2d, 0x9e, 0x7d, 0xfa, 0x66, 0x78, 0x00, 0x96, 0xb3, 0xba, 0x88, 0x9d, 0x3e, 0x27, 0x36, 0x47, + 0x57, 0x94, 0xbf, 0x9b, 0xf2, 0x39, 0x34, 0xd3, 0x92, 0xc4, 0x41, 0xf1, 0x1c, 0x65, 0xb0, 0xb0, + 0x5e, 0x91, 0x42, 0x02, 0x96, 0x64, 0x95, 0xc9, 0xa4, 0xfa, 0xd4, 0x4d, 0x38, 0x5a, 0x57, 0x36, + 0xbf, 0x23, 0x6d, 0x06, 0xce, 0xf1, 0xbd, 0x1c, 0x4f, 0x05, 0xc6, 0xba, 0xc1, 0x4a, 0x60, 0xa9, + 0xd9, 0x6f, 0xde, 0xc9, 0x1d, 0xc8, 0xa1, 0x76, 0xf3, 0x8e, 0x55, 0xd9, 0x0d, 0x3d, 0x70, 0xc5, + 0xa3, 0x5c, 0x0e, 0x61, 0x9b, 0xc7, 0x0e, 0xe3, 0xc4, 0x56, 0x47, 0x3b, 0xba, 0xaa, 0xde, 0xc4, + 0xee, 0x48, 0x60, 0x98, 0xf1, 0x07, 0x8a, 0x56, 0x97, 0x86, 0x54, 0x60, 0xa4, 0x8f, 0xc6, 0x09, + 0xca, 0xb4, 0xa6, 0xe8, 0xcb, 0x5e, 0x12, 0x12, 0xc4, 0x36, 0x0d, 0x3d, 0x72, 0x4c, 0x38, 0xba, + 0x36, 0xe1, 0xe5, 0x31, 0x09, 0xe2, 0xfb, 0x9a, 0xad, 0x7b, 0x29, 0x51, 0x63, 0x2f, 0x25, 0x10, + 0xee, 0x82, 0x8b, 0xea, 0x05, 0x78, 0x08, 0x29, 0xbb, 0x1b, 0x23, 0x81, 0x33, 0xa4, 0x38, 0xcc, + 0xf5, 0xd2, 0xb4, 0x32, 0x1c, 0x26, 0xe0, 0xda, 0x11, 0x71, 0x0e, 0x6d, 0x59, 0xd5, 0x76, 0xd2, + 0x63, 0x84, 0xf7, 0x22, 0xdf, 0xb3, 0x63, 0x37, 0x41, 0xd7, 0x55, 0xc2, 0xe5, 0x24, 0xbf, 0x22, + 0x25, 0xdf, 0x73, 0x78, 0xef, 0x71, 0x2e, 0x68, 0xb9, 0x49, 0x2a, 0xf0, 0x86, 0x32, 0x39, 0x8d, + 0x2c, 0x5e, 0xea, 0xd4, 0xad, 0xf0, 0x1e, 0x58, 0x08, 0x1c, 0x76, 0x48, 0x98, 0x1d, 0x3a, 0x01, + 0x41, 0x1b, 0xea, 0xda, 0x64, 0xca, 0x71, 0xa6, 0xe1, 0x8f, 0x9d, 0x80, 0x14, 0xe3, 0x6c, 0x0c, + 0x99, 0x56, 0x89, 0x87, 0x03, 0xb0, 0x21, 0x3f, 0x12, 0xec, 0xe8, 0x28, 0x24, 0x8c, 0xf7, 0x68, + 0x6c, 0x77, 0x58, 0x14, 0xd8, 0xb1, 0xc3, 0x48, 0x98, 0xa0, 0x1b, 0x2a, 0x05, 0xef, 0x8d, 0x04, + 0xbe, 0x26, 0x55, 0x8f, 0x72, 0xd1, 0x3e, 0x8b, 0x82, 0x96, 0x92, 0xa4, 0x02, 0xbf, 0x9e, 0x4f, + 0xbc, 0x69, 0xbc, 0x69, 0x7d, 0xd9, 0x4e, 0xf8, 0x4b, 0x03, 0xac, 0x05, 0x91, 0x67, 0x27, 0x34, + 0x20, 0xf6, 0x11, 0x0d, 0xbd, 0xe8, 0xc8, 0xe6, 0xe8, 0x35, 0x95, 0xb0, 0x9f, 0x9c, 0x09, 0xbc, + 0x66, 0x39, 0x47, 0x0f, 0x23, 0xef, 0x31, 0x0d, 0xc8, 0x13, 0xc5, 0xca, 0xe3, 0x7a, 0x39, 0xa8, + 0x20, 0xc5, 0xe5, 0xb2, 0x0a, 0xe7, 0x99, 0x3b, 0x19, 0x36, 0x26, 0xad, 0x58, 0x35, 0x1b, 0xf0, + 0x85, 0x01, 0xd6, 0xb3, 0x36, 0x71, 0xfb, 0x4c, 0xc6, 0x66, 0x1f, 0x31, 0x9a, 0x10, 0x8e, 0x5e, + 0x57, 0xc1, 0xfc, 0x40, 0x8e, 0x5e, 0x5d, 0xf0, 0x19, 0xff, 0x44, 0xd1, 0xa9, 0xc0, 0x5f, 0x2f, + 0x75, 0x4d, 0x85, 0x2b, 0x35, 0xcf, 0x6e, 0xa9, 0x77, 0x8c, 0x5d, 0x6b, 0x9a, 0x25, 0x39, 0xc4, + 0xf2, 0xda, 0xee, 0xc8, 0x2f, 0x12, 0xb4, 0x39, 0x1e, 0x62, 0x19, 0xb1, 0x2f, 0xf1, 0xa2, 0xf9, + 0xcb, 0xa0, 0x69, 0x55, 0x34, 0xd0, 0x07, 0xab, 0xea, 0x4b, 0xd1, 0x96, 0xb3, 0xc0, 0xd6, 0xf3, + 0x15, 0xab, 0xf9, 0x7a, 0x35, 0x9f, 0xaf, 0x4d, 0xc9, 0x8f, 0x87, 0xac, 0xba, 0xb6, 0xb7, 0x2b, + 0x58, 0x91, 0xd9, 0x2a, 0x6c, 0x5a, 0x35, 0x1d, 0xfc, 0xd4, 0x00, 0x6b, 0xaa, 0x84, 0xd4, 0x87, + 0xa6, 0xad, 0xbf, 0x34, 0xd1, 0x96, 0xf2, 0x77, 0x59, 0x7e, 0x22, 0xdc, 0x8b, 0xe2, 0x81, 0x25, + 0xb9, 0x87, 0x8a, 0x6a, 0x3e, 0x90, 0xb7, 0x2e, 0xb7, 0x0a, 0xa6, 0x02, 0x6f, 0x17, 0x65, 0x54, + 0xc2, 0x4b, 0x69, 0xe4, 0x89, 0x13, 0x7a, 0x0e, 0xf3, 0xcc, 0x57, 0xa7, 0x8d, 0xb9, 0x7c, 0x61, + 0xd5, 0x0d, 0xc1, 0x3f, 0xc9, 0x70, 0x1c, 0x39, 0x40, 0x49, 0xc8, 0x69, 0x42, 0x9f, 0xc9, 0x8c, + 0xa2, 0x37, 0x54, 0x3a, 0x8f, 0xe5, 0x15, 0xf0, 0x9e, 0xc3, 0xc9, 0x41, 0xce, 0xed, 0xab, 0x2b, + 0xa0, 0x5b, 0x85, 0x52, 0x81, 0xd7, 0x75, 0x30, 0x55, 0x5c, 0x5e, 0x77, 0x26, 0xb4, 0x93, 0x90, + 0xbc, 0xf1, 0xd5, 0x9c, 0x58, 0x35, 0x0d, 0x87, 0x7f, 0x34, 0xc0, 0x6a, 0x27, 0xf2, 0xfd, 0xe8, + 0xc8, 0xfe, 0xa4, 0x1f, 0xba, 0xf2, 0x3a, 0xc2, 0x91, 0x39, 0x8e, 0xf2, 0xfb, 0x39, 0xf8, 0x21, + 0xdf, 0xa3, 0x8c, 0xcb, 0x28, 0x3f, 0xa9, 0x42, 0x45, 0x94, 0x35, 0x5c, 0x45, 0x59, 0xd7, 0x4e, + 0x42, 0x32, 0xca, 0x9a, 0x13, 0x6b, 0x45, 0x47, 0x54, 0xc0, 0xf0, 0x10, 0xcc, 0x33, 0xe2, 0x78, + 0x76, 0x14, 0xfa, 0x03, 0xf4, 0x97, 0x7d, 0x15, 0xde, 0xc3, 0x33, 0x81, 0xe1, 0x1e, 0x89, 0x19, + 0x71, 0x9d, 0x84, 0x78, 0x16, 0x71, 0xbc, 0x47, 0xa1, 0x3f, 0x18, 0x09, 0x6c, 0xdc, 0x2c, 0xbe, + 0x8e, 0x59, 0xa4, 0x6e, 0x82, 0xef, 0x44, 0x01, 0x95, 0xb3, 0x3a, 0x19, 0xa8, 0xaf, 0xe3, 0x09, + 0x14, 0x19, 0xd6, 0x1c, 0xcb, 0x0c, 0xc0, 0x9f, 0x83, 0xb5, 0xca, 0xf5, 0x50, 0xcd, 0xcf, 0xbf, + 0x4a, 0xa7, 0x46, 0xf3, 0xa3, 0x33, 0x81, 0xd1, 0xd8, 0xe9, 0xc3, 0xf1, 0xcd, 0xaf, 0xe5, 0x26, + 0xb9, 0xeb, 0xcd, 0xfa, 0x1d, 0xb1, 0xe5, 0x26, 0xa5, 0x08, 0x90, 0x61, 0x2d, 0x57, 0x49, 0xf8, + 0x63, 0x70, 0x49, 0x9f, 0x97, 0x1c, 0x7d, 0xb6, 0xaf, 0x7a, 0xfd, 0x03, 0x39, 0x78, 0xc6, 0x8e, + 0xf4, 0x3d, 0x88, 0x57, 0x1f, 0x2e, 0xdb, 0x52, 0x32, 0x9d, 0x35, 0x38, 0x32, 0xac, 0xdc, 0x5e, + 0xf3, 0xbb, 0x9f, 0x7f, 0xb1, 0x39, 0x33, 0xfc, 0x62, 0x73, 0xe6, 0xdf, 0x67, 0x9b, 0x33, 0xbf, + 0x7d, 0xb9, 0x39, 0xf3, 0x87, 0x97, 0x9b, 0xc6, 0xf0, 0xe5, 0xe6, 0xcc, 0x3f, 0x5f, 0x6e, 0xce, + 0x3c, 0x7d, 0xeb, 0xff, 0xf8, 0x2f, 0x42, 0xb7, 0x6a, 0xfb, 0xa2, 0xfa, 0x4f, 0xe2, 0xdd, 0xff, + 0x06, 0x00, 0x00, 0xff, 0xff, 0xe9, 0xb3, 0xf1, 0x6d, 0xb1, 0x12, 0x00, 0x00, +} + +func (m *FolderDeviceConfiguration) ProtoSize() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.DeviceID.ProtoSize() + n += 1 + l + sovFolderconfiguration(uint64(l)) + l = m.IntroducedBy.ProtoSize() + n += 1 + l + sovFolderconfiguration(uint64(l)) + return n +} + +func (m *FolderConfiguration) ProtoSize() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ID) + if l > 0 { + n += 1 + l + sovFolderconfiguration(uint64(l)) + } + l = len(m.Label) + if l > 0 { + n += 1 + l + sovFolderconfiguration(uint64(l)) + } + if m.FilesystemType != 0 { + n += 1 + sovFolderconfiguration(uint64(m.FilesystemType)) + } + l = len(m.Path) + if l > 0 { + n += 1 + l + sovFolderconfiguration(uint64(l)) + } + if m.Type != 0 { + n += 1 + sovFolderconfiguration(uint64(m.Type)) + } + if len(m.Devices) > 0 { + for _, e := range m.Devices { + l = e.ProtoSize() + n += 1 + l + sovFolderconfiguration(uint64(l)) + } + } + if m.RescanIntervalS != 0 { + n += 1 + sovFolderconfiguration(uint64(m.RescanIntervalS)) + } + if m.FSWatcherEnabled { + n += 2 + } + if m.FSWatcherDelayS != 0 { + n += 1 + sovFolderconfiguration(uint64(m.FSWatcherDelayS)) + } + if m.IgnorePerms { + n += 2 + } + if m.AutoNormalize { + n += 2 + } + l = m.MinDiskFree.ProtoSize() + n += 1 + l + sovFolderconfiguration(uint64(l)) + l = m.Versioning.ProtoSize() + n += 1 + l + sovFolderconfiguration(uint64(l)) + if m.Copiers != 0 { + n += 1 + sovFolderconfiguration(uint64(m.Copiers)) + } + if m.PullerMaxPendingKiB != 0 { + n += 1 + sovFolderconfiguration(uint64(m.PullerMaxPendingKiB)) + } + if m.Hashers != 0 { + n += 2 + sovFolderconfiguration(uint64(m.Hashers)) + } + if m.Order != 0 { + n += 2 + sovFolderconfiguration(uint64(m.Order)) + } + if m.IgnoreDelete { + n += 3 + } + if m.ScanProgressIntervalS != 0 { + n += 2 + sovFolderconfiguration(uint64(m.ScanProgressIntervalS)) + } + if m.PullerPauseS != 0 { + n += 2 + sovFolderconfiguration(uint64(m.PullerPauseS)) + } + if m.MaxConflicts != 0 { + n += 2 + sovFolderconfiguration(uint64(m.MaxConflicts)) + } + if m.DisableSparseFiles { + n += 3 + } + if m.DisableTempIndexes { + n += 3 + } + if m.Paused { + n += 3 + } + if m.WeakHashThresholdPct != 0 { + n += 2 + sovFolderconfiguration(uint64(m.WeakHashThresholdPct)) + } + l = len(m.MarkerName) + if l > 0 { + n += 2 + l + sovFolderconfiguration(uint64(l)) + } + if m.CopyOwnershipFromParent { + n += 3 + } + if m.RawModTimeWindowS != 0 { + n += 2 + sovFolderconfiguration(uint64(m.RawModTimeWindowS)) + } + if m.MaxConcurrentWrites != 0 { + n += 2 + sovFolderconfiguration(uint64(m.MaxConcurrentWrites)) + } + if m.DisableFsync { + n += 3 + } + if m.BlockPullOrder != 0 { + n += 2 + sovFolderconfiguration(uint64(m.BlockPullOrder)) + } + if m.CopyRangeMethod != 0 { + n += 2 + sovFolderconfiguration(uint64(m.CopyRangeMethod)) + } + if m.CaseSensitiveFS { + n += 3 + } + if m.JunctionsAsDirs { + n += 3 + } + if m.DeprecatedReadOnly { + n += 4 + } + if m.DeprecatedMinDiskFreePct != 0 { + n += 11 + } + if m.DeprecatedPullers != 0 { + n += 3 + sovFolderconfiguration(uint64(m.DeprecatedPullers)) + } + return n +} + +func sovFolderconfiguration(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozFolderconfiguration(x uint64) (n int) { + return sovFolderconfiguration(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} diff --git a/lib/config/foldertype.go b/lib/config/foldertype.go index e76ef0884..f82e7fba9 100644 --- a/lib/config/foldertype.go +++ b/lib/config/foldertype.go @@ -6,14 +6,6 @@ package config -type FolderType int - -const ( - FolderTypeSendReceive FolderType = iota // default is sendreceive - FolderTypeSendOnly - FolderTypeReceiveOnly -) - func (t FolderType) String() string { switch t { case FolderTypeSendReceive: diff --git a/lib/config/foldertype.pb.go b/lib/config/foldertype.pb.go new file mode 100644 index 000000000..edecf4a34 --- /dev/null +++ b/lib/config/foldertype.pb.go @@ -0,0 +1,69 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: lib/config/foldertype.proto + +package config + +import ( + fmt "fmt" + proto "github.com/gogo/protobuf/proto" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type FolderType int32 + +const ( + FolderTypeSendReceive FolderType = 0 + FolderTypeSendOnly FolderType = 1 + FolderTypeReceiveOnly FolderType = 2 +) + +var FolderType_name = map[int32]string{ + 0: "FOLDER_TYPE_SEND_RECEIVE", + 1: "FOLDER_TYPE_SEND_ONLY", + 2: "FOLDER_TYPE_RECEIVE_ONLY", +} + +var FolderType_value = map[string]int32{ + "FOLDER_TYPE_SEND_RECEIVE": 0, + "FOLDER_TYPE_SEND_ONLY": 1, + "FOLDER_TYPE_RECEIVE_ONLY": 2, +} + +func (FolderType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_ea6ddb20c0633575, []int{0} +} + +func init() { + proto.RegisterEnum("config.FolderType", FolderType_name, FolderType_value) +} + +func init() { proto.RegisterFile("lib/config/foldertype.proto", fileDescriptor_ea6ddb20c0633575) } + +var fileDescriptor_ea6ddb20c0633575 = []byte{ + // 220 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0xce, 0xc9, 0x4c, 0xd2, + 0x4f, 0xce, 0xcf, 0x4b, 0xcb, 0x4c, 0xd7, 0x4f, 0xcb, 0xcf, 0x49, 0x49, 0x2d, 0x2a, 0xa9, 0x2c, + 0x48, 0xd5, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x83, 0x48, 0x68, 0x6d, 0x64, 0xe4, 0xe2, + 0x72, 0x03, 0x4b, 0x86, 0x54, 0x16, 0xa4, 0x0a, 0x99, 0x73, 0x49, 0xb8, 0xf9, 0xfb, 0xb8, 0xb8, + 0x06, 0xc5, 0x87, 0x44, 0x06, 0xb8, 0xc6, 0x07, 0xbb, 0xfa, 0xb9, 0xc4, 0x07, 0xb9, 0x3a, 0xbb, + 0x7a, 0x86, 0xb9, 0x0a, 0x30, 0x48, 0x49, 0x76, 0xcd, 0x55, 0x10, 0x45, 0xa8, 0x0e, 0x4e, 0xcd, + 0x4b, 0x09, 0x4a, 0x4d, 0x4e, 0xcd, 0x2c, 0x4b, 0x15, 0x32, 0xe4, 0x12, 0xc5, 0xd0, 0xe8, 0xef, + 0xe7, 0x13, 0x29, 0xc0, 0x28, 0x25, 0xd6, 0x35, 0x57, 0x41, 0x08, 0x55, 0x97, 0x7f, 0x5e, 0x4e, + 0x25, 0xba, 0x5d, 0x50, 0x6b, 0x20, 0xba, 0x98, 0xd0, 0xed, 0x82, 0xda, 0x03, 0xd2, 0xe8, 0xe4, + 0x7e, 0xe2, 0xa1, 0x1c, 0xc3, 0x85, 0x87, 0x72, 0x0c, 0x2f, 0x1e, 0xc9, 0x31, 0x4c, 0x78, 0x2c, + 0xc7, 0xb0, 0xe0, 0xb1, 0x1c, 0xe3, 0x85, 0xc7, 0x72, 0x0c, 0x37, 0x1e, 0xcb, 0x31, 0x44, 0x69, + 0xa6, 0x67, 0x96, 0x64, 0x94, 0x26, 0xe9, 0x25, 0xe7, 0xe7, 0xea, 0x17, 0x57, 0xe6, 0x25, 0x97, + 0x64, 0x64, 0xe6, 0xa5, 0x23, 0xb1, 0x10, 0xa1, 0x92, 0xc4, 0x06, 0x0e, 0x0b, 0x63, 0x40, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x7b, 0x44, 0x34, 0x9f, 0x2a, 0x01, 0x00, 0x00, +} diff --git a/lib/config/guiconfiguration.go b/lib/config/guiconfiguration.go index 2ae7497cd..826870cce 100644 --- a/lib/config/guiconfiguration.go +++ b/lib/config/guiconfiguration.go @@ -13,22 +13,6 @@ import ( "strings" ) -type GUIConfiguration struct { - Enabled bool `xml:"enabled,attr" json:"enabled" default:"true"` - RawAddress string `xml:"address" json:"address" default:"127.0.0.1:8384"` - RawUnixSocketPermissions string `xml:"unixSocketPermissions,omitempty" json:"unixSocketPermissions"` - User string `xml:"user,omitempty" json:"user"` - Password string `xml:"password,omitempty" json:"password"` - AuthMode AuthMode `xml:"authMode,omitempty" json:"authMode"` - RawUseTLS bool `xml:"tls,attr" json:"useTLS"` - APIKey string `xml:"apikey,omitempty" json:"apiKey"` - InsecureAdminAccess bool `xml:"insecureAdminAccess,omitempty" json:"insecureAdminAccess"` - Theme string `xml:"theme" json:"theme" default:"default"` - Debugging bool `xml:"debugging,attr" json:"debugging"` - InsecureSkipHostCheck bool `xml:"insecureSkipHostcheck,omitempty" json:"insecureSkipHostcheck"` - InsecureAllowFrameLoading bool `xml:"insecureAllowFrameLoading,omitempty" json:"insecureAllowFrameLoading"` -} - func (c GUIConfiguration) IsAuthEnabled() bool { return c.AuthMode == AuthModeLDAP || (len(c.User) > 0 && len(c.Password) > 0) } diff --git a/lib/config/guiconfiguration.pb.go b/lib/config/guiconfiguration.pb.go new file mode 100644 index 000000000..dd839780c --- /dev/null +++ b/lib/config/guiconfiguration.pb.go @@ -0,0 +1,187 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: lib/config/guiconfiguration.proto + +package config + +import ( + fmt "fmt" + proto "github.com/gogo/protobuf/proto" + _ "github.com/syncthing/syncthing/proto/ext" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type GUIConfiguration struct { + Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled" xml:"enabled,attr" default:"true"` + RawAddress string `protobuf:"bytes,2,opt,name=address,proto3" json:"address" xml:"address" default:"127.0.0.1:8384"` + RawUnixSocketPermissions string `protobuf:"bytes,3,opt,name=unix_socket_permissions,json=unixSocketPermissions,proto3" json:"unixSocketPermissions" xml:"unixSocketPermissions,omitempty"` + User string `protobuf:"bytes,4,opt,name=user,proto3" json:"user" xml:"user,omitempty"` + Password string `protobuf:"bytes,5,opt,name=password,proto3" json:"password" xml:"password,omitempty"` + AuthMode AuthMode `protobuf:"varint,6,opt,name=auth_mode,json=authMode,proto3,enum=config.AuthMode" json:"authMode" xml:"authMode,omitempty"` + RawUseTLS bool `protobuf:"varint,7,opt,name=use_tls,json=useTls,proto3" json:"useTLS" xml:"tls,attr"` + APIKey string `protobuf:"bytes,8,opt,name=api_key,json=apiKey,proto3" json:"apiKey" xml:"apikey,omitempty"` + InsecureAdminAccess bool `protobuf:"varint,9,opt,name=insecure_admin_access,json=insecureAdminAccess,proto3" json:"insecureAdminAccess" xml:"insecureAdminAccess,omitempty"` + Theme string `protobuf:"bytes,10,opt,name=theme,proto3" json:"theme" xml:"theme" default:"default"` + Debugging bool `protobuf:"varint,11,opt,name=debugging,proto3" json:"debugging" xml:"debugging,attr"` + InsecureSkipHostCheck bool `protobuf:"varint,12,opt,name=insecure_skip_host_check,json=insecureSkipHostCheck,proto3" json:"insecureSkipHostcheck" xml:"insecureSkipHostcheck,omitempty"` + InsecureAllowFrameLoading bool `protobuf:"varint,13,opt,name=insecure_allow_frame_loading,json=insecureAllowFrameLoading,proto3" json:"insecureAllowFrameLoading" xml:"insecureAllowFrameLoading,omitempty"` +} + +func (m *GUIConfiguration) Reset() { *m = GUIConfiguration{} } +func (m *GUIConfiguration) String() string { return proto.CompactTextString(m) } +func (*GUIConfiguration) ProtoMessage() {} +func (*GUIConfiguration) Descriptor() ([]byte, []int) { + return fileDescriptor_2a9586d611855d64, []int{0} +} +func (m *GUIConfiguration) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GUIConfiguration.Unmarshal(m, b) +} +func (m *GUIConfiguration) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GUIConfiguration.Marshal(b, m, deterministic) +} +func (m *GUIConfiguration) XXX_Merge(src proto.Message) { + xxx_messageInfo_GUIConfiguration.Merge(m, src) +} +func (m *GUIConfiguration) XXX_Size() int { + return xxx_messageInfo_GUIConfiguration.Size(m) +} +func (m *GUIConfiguration) XXX_DiscardUnknown() { + xxx_messageInfo_GUIConfiguration.DiscardUnknown(m) +} + +var xxx_messageInfo_GUIConfiguration proto.InternalMessageInfo + +func init() { + proto.RegisterType((*GUIConfiguration)(nil), "config.GUIConfiguration") +} + +func init() { proto.RegisterFile("lib/config/guiconfiguration.proto", fileDescriptor_2a9586d611855d64) } + +var fileDescriptor_2a9586d611855d64 = []byte{ + // 834 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x55, 0xcd, 0x6e, 0xdb, 0x46, + 0x10, 0x16, 0x5b, 0x47, 0xb2, 0xb6, 0xae, 0x60, 0xb0, 0x4d, 0xcb, 0x04, 0x8d, 0x56, 0x51, 0xd8, + 0xc2, 0x01, 0x02, 0x39, 0x71, 0x5a, 0x24, 0xf0, 0xa1, 0x80, 0x1c, 0x20, 0x3f, 0xb0, 0x0b, 0x04, + 0x74, 0x7d, 0xc9, 0x85, 0x58, 0x91, 0x6b, 0x69, 0x21, 0xfe, 0x95, 0xbb, 0x84, 0xa4, 0x43, 0xfb, + 0x0c, 0x85, 0x7a, 0x2e, 0xd0, 0x67, 0xe8, 0xa5, 0xaf, 0xd0, 0x9b, 0x74, 0x2a, 0x72, 0x5a, 0x20, + 0xd2, 0xa5, 0xe0, 0x91, 0xc7, 0x9c, 0x8a, 0x5d, 0xfe, 0x48, 0x94, 0x95, 0x26, 0xb7, 0x9d, 0x6f, + 0xbe, 0x99, 0x6f, 0x66, 0x38, 0x03, 0x82, 0xdb, 0x0e, 0xe9, 0x1d, 0x5a, 0xbe, 0x77, 0x49, 0xfa, + 0x87, 0xfd, 0x88, 0xa4, 0xaf, 0x28, 0x44, 0x8c, 0xf8, 0x5e, 0x27, 0x08, 0x7d, 0xe6, 0xab, 0xd5, + 0x14, 0xbc, 0x79, 0x63, 0x8d, 0x8a, 0x22, 0x36, 0x70, 0x7d, 0x1b, 0xa7, 0x94, 0x9b, 0x75, 0x3c, + 0x66, 0xe9, 0xb3, 0xfd, 0x7a, 0x0f, 0xec, 0x3f, 0xbb, 0x78, 0xf1, 0x64, 0x3d, 0x91, 0xda, 0x03, + 0x35, 0xec, 0xa1, 0x9e, 0x83, 0x6d, 0x4d, 0x69, 0x29, 0x07, 0xbb, 0x27, 0xcf, 0x63, 0x0e, 0x73, + 0x28, 0xe1, 0xf0, 0xf6, 0xd8, 0x75, 0x8e, 0xdb, 0x99, 0x7d, 0x0f, 0x31, 0x16, 0xb6, 0x5b, 0x36, + 0xbe, 0x44, 0x91, 0xc3, 0x8e, 0xdb, 0x2c, 0x8c, 0x70, 0x3b, 0x9e, 0xe9, 0x7b, 0xeb, 0xfe, 0xb7, + 0x33, 0x7d, 0x47, 0x38, 0x8c, 0x3c, 0x8b, 0xfa, 0x33, 0xa8, 0x21, 0xdb, 0x0e, 0x31, 0xa5, 0xda, + 0x47, 0x2d, 0xe5, 0xa0, 0x7e, 0x62, 0x2d, 0x38, 0x04, 0x06, 0x1a, 0x75, 0x53, 0x54, 0x28, 0x66, + 0x84, 0x84, 0xc3, 0x6f, 0xa4, 0x62, 0x66, 0xaf, 0x89, 0x3d, 0x38, 0x7a, 0xd4, 0xb9, 0xdf, 0xb9, + 0xdf, 0x79, 0x70, 0xfc, 0xf8, 0xe1, 0xe3, 0x6f, 0xdb, 0x6f, 0x67, 0x7a, 0xa3, 0x0c, 0x4d, 0xe7, + 0xfa, 0x5a, 0x52, 0x23, 0x4f, 0xa9, 0xfe, 0xa3, 0x80, 0x2f, 0x23, 0x8f, 0x8c, 0x4d, 0xea, 0x5b, + 0x43, 0xcc, 0xcc, 0x00, 0x87, 0x2e, 0xa1, 0x94, 0xf8, 0x1e, 0xd5, 0x3e, 0x96, 0xf5, 0xfc, 0xae, + 0x2c, 0x38, 0xd4, 0x0c, 0x34, 0xba, 0xf0, 0xc8, 0xf8, 0x5c, 0xb2, 0x5e, 0xae, 0x48, 0x31, 0x87, + 0xd7, 0xa3, 0x6d, 0x8e, 0x84, 0xc3, 0xaf, 0x65, 0xb1, 0x5b, 0xbd, 0xf7, 0x7c, 0x97, 0x30, 0xec, + 0x06, 0x6c, 0x22, 0x46, 0x04, 0xdf, 0xc3, 0x99, 0xce, 0xf5, 0x77, 0x16, 0x60, 0x6c, 0x97, 0x57, + 0x9f, 0x82, 0x9d, 0x88, 0xe2, 0x50, 0xdb, 0x91, 0x4d, 0x1c, 0xc5, 0x1c, 0x4a, 0x3b, 0xe1, 0xf0, + 0xf3, 0xb4, 0x2c, 0x8a, 0xc3, 0x72, 0x15, 0x8d, 0x32, 0x64, 0x48, 0xbe, 0xfa, 0x0a, 0xec, 0x06, + 0x88, 0xd2, 0x91, 0x1f, 0xda, 0xda, 0x35, 0x99, 0xeb, 0xfb, 0x98, 0xc3, 0x02, 0x4b, 0x38, 0xd4, + 0x64, 0xbe, 0x1c, 0x28, 0xe7, 0x54, 0xaf, 0xc2, 0x46, 0x11, 0xab, 0xba, 0xa0, 0x2e, 0x36, 0xd2, + 0x14, 0x2b, 0xa9, 0x55, 0x5b, 0xca, 0x41, 0xe3, 0x68, 0xbf, 0x93, 0xae, 0x6a, 0xa7, 0x1b, 0xb1, + 0xc1, 0x0f, 0xbe, 0x8d, 0x53, 0x39, 0x94, 0x59, 0x85, 0x5c, 0x0e, 0x6c, 0xc8, 0x5d, 0x85, 0x8d, + 0x22, 0x56, 0xc5, 0xa0, 0x16, 0x51, 0x6c, 0x32, 0x87, 0x6a, 0x35, 0xb9, 0xce, 0x67, 0x0b, 0x0e, + 0xeb, 0x62, 0xb0, 0x14, 0xff, 0x78, 0x76, 0x1e, 0x73, 0x58, 0x8d, 0xe4, 0x2b, 0xe1, 0xb0, 0x21, + 0x55, 0x98, 0x43, 0xd3, 0xb5, 0x8e, 0x67, 0xfa, 0x6e, 0x6e, 0x24, 0x33, 0x3d, 0xe3, 0x4d, 0xe7, + 0xfa, 0x2a, 0xdc, 0x90, 0xa0, 0x43, 0x85, 0x0c, 0x0a, 0x88, 0x39, 0xc4, 0x13, 0x6d, 0x57, 0x0e, + 0x4c, 0xc8, 0x54, 0xbb, 0x2f, 0x5f, 0x9c, 0xe2, 0x89, 0xd0, 0x40, 0x01, 0x39, 0xc5, 0x93, 0x84, + 0xc3, 0x2f, 0xd2, 0x4e, 0x02, 0x32, 0xc4, 0x93, 0x72, 0x1f, 0xfb, 0x9b, 0xe0, 0x74, 0xae, 0x67, + 0x19, 0x8c, 0x2c, 0x5e, 0xfd, 0x4d, 0x01, 0xd7, 0x89, 0x47, 0xb1, 0x15, 0x85, 0xd8, 0x44, 0xb6, + 0x4b, 0x3c, 0x13, 0x59, 0x96, 0xb8, 0xa3, 0xba, 0x6c, 0xce, 0x8c, 0x39, 0xfc, 0x2c, 0x27, 0x74, + 0x85, 0xbf, 0x2b, 0xdd, 0x09, 0x87, 0x77, 0xa4, 0xf0, 0x16, 0x5f, 0xb9, 0x8a, 0x5b, 0xff, 0xcb, + 0x30, 0xb6, 0x25, 0x57, 0x4f, 0xc1, 0x35, 0x36, 0xc0, 0x2e, 0xd6, 0x80, 0x6c, 0xfd, 0xbb, 0x98, + 0xc3, 0x14, 0x48, 0x38, 0xbc, 0x95, 0xce, 0x54, 0x58, 0x6b, 0xa7, 0x9b, 0x3d, 0xc4, 0xcd, 0xd6, + 0xb2, 0xb7, 0x91, 0x86, 0xa8, 0x17, 0xa0, 0x6e, 0xe3, 0x5e, 0xd4, 0xef, 0x13, 0xaf, 0xaf, 0x7d, + 0x22, 0xbb, 0x7a, 0x14, 0x73, 0xb8, 0x02, 0x8b, 0x6d, 0x2e, 0x90, 0xe2, 0x73, 0x35, 0xca, 0x90, + 0xb1, 0x0a, 0x52, 0xff, 0x52, 0x80, 0x56, 0x4c, 0x8e, 0x0e, 0x49, 0x60, 0x0e, 0x7c, 0xca, 0x4c, + 0x6b, 0x80, 0xad, 0xa1, 0xb6, 0x27, 0x65, 0x7e, 0x11, 0x77, 0x9d, 0x73, 0xce, 0x87, 0x24, 0x78, + 0xee, 0x53, 0x26, 0x09, 0xc5, 0x5d, 0x6f, 0xf5, 0x6e, 0xdc, 0xf5, 0x7b, 0x38, 0xc9, 0x4c, 0xdf, + 0x2e, 0x62, 0x5c, 0x81, 0x9f, 0x08, 0x58, 0xfd, 0x53, 0x01, 0x5f, 0xad, 0xbe, 0xb9, 0xe3, 0xf8, + 0x23, 0xf3, 0x32, 0x44, 0x2e, 0x36, 0x1d, 0x1f, 0xd9, 0x62, 0x48, 0x9f, 0xca, 0xea, 0x7f, 0x8a, + 0x39, 0xbc, 0x51, 0x7c, 0x1d, 0x41, 0x7b, 0x2a, 0x58, 0x67, 0x29, 0x29, 0xe1, 0xf0, 0x6e, 0x79, + 0x01, 0x36, 0x19, 0xe5, 0x2e, 0xee, 0x7c, 0x00, 0xcf, 0x78, 0xb7, 0xdc, 0xc9, 0xb3, 0xbf, 0xdf, + 0x34, 0x2b, 0xf3, 0x37, 0xcd, 0xca, 0xbf, 0x8b, 0x66, 0xe5, 0xd7, 0x65, 0xb3, 0xf2, 0xc7, 0xb2, + 0xa9, 0xcc, 0x97, 0xcd, 0xca, 0xeb, 0x65, 0xb3, 0xf2, 0xea, 0x6e, 0x9f, 0xb0, 0x41, 0xd4, 0xeb, + 0x58, 0xbe, 0x7b, 0x48, 0x27, 0x9e, 0xc5, 0x06, 0xc4, 0xeb, 0xaf, 0xbd, 0x56, 0x7f, 0xaf, 0x5e, + 0x55, 0xfe, 0xaa, 0x1e, 0xfe, 0x17, 0x00, 0x00, 0xff, 0xff, 0xfa, 0x2b, 0x9a, 0x81, 0xfd, 0x06, + 0x00, 0x00, +} + +func (m *GUIConfiguration) ProtoSize() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Enabled { + n += 2 + } + l = len(m.RawAddress) + if l > 0 { + n += 1 + l + sovGuiconfiguration(uint64(l)) + } + l = len(m.RawUnixSocketPermissions) + if l > 0 { + n += 1 + l + sovGuiconfiguration(uint64(l)) + } + l = len(m.User) + if l > 0 { + n += 1 + l + sovGuiconfiguration(uint64(l)) + } + l = len(m.Password) + if l > 0 { + n += 1 + l + sovGuiconfiguration(uint64(l)) + } + if m.AuthMode != 0 { + n += 1 + sovGuiconfiguration(uint64(m.AuthMode)) + } + if m.RawUseTLS { + n += 2 + } + l = len(m.APIKey) + if l > 0 { + n += 1 + l + sovGuiconfiguration(uint64(l)) + } + if m.InsecureAdminAccess { + n += 2 + } + l = len(m.Theme) + if l > 0 { + n += 1 + l + sovGuiconfiguration(uint64(l)) + } + if m.Debugging { + n += 2 + } + if m.InsecureSkipHostCheck { + n += 2 + } + if m.InsecureAllowFrameLoading { + n += 2 + } + return n +} + +func sovGuiconfiguration(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGuiconfiguration(x uint64) (n int) { + return sovGuiconfiguration(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} diff --git a/lib/config/ldapconfiguration.go b/lib/config/ldapconfiguration.go index 9a3fca7e4..f1f83cc2c 100644 --- a/lib/config/ldapconfiguration.go +++ b/lib/config/ldapconfiguration.go @@ -6,15 +6,6 @@ package config -type LDAPConfiguration struct { - Address string `xml:"address,omitempty" json:"address"` - BindDN string `xml:"bindDN,omitempty" json:"bindDN"` - Transport LDAPTransport `xml:"transport,omitempty" json:"transport"` - InsecureSkipVerify bool `xml:"insecureSkipVerify,omitempty" json:"insecureSkipVerify" default:"false"` - SearchBaseDN string `xml:"searchBaseDN,omitempty" json:"searchBaseDN"` - SearchFilter string `xml:"searchFilter,omitempty" json:"searchFilter"` -} - func (c LDAPConfiguration) Copy() LDAPConfiguration { return c } diff --git a/lib/config/ldapconfiguration.pb.go b/lib/config/ldapconfiguration.pb.go new file mode 100644 index 000000000..85f61d904 --- /dev/null +++ b/lib/config/ldapconfiguration.pb.go @@ -0,0 +1,138 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: lib/config/ldapconfiguration.proto + +package config + +import ( + fmt "fmt" + proto "github.com/gogo/protobuf/proto" + _ "github.com/syncthing/syncthing/proto/ext" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type LDAPConfiguration struct { + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address" xml:"address,omitempty"` + BindDN string `protobuf:"bytes,2,opt,name=bind_dn,json=bindDn,proto3" json:"bindDN" xml:"bindDN,omitempty"` + Transport LDAPTransport `protobuf:"varint,3,opt,name=transport,proto3,enum=config.LDAPTransport" json:"transport" xml:"transport,omitempty"` + InsecureSkipVerify bool `protobuf:"varint,4,opt,name=insecure_skip_verify,json=insecureSkipVerify,proto3" json:"insecureSkipVerify" xml:"insecureSkipVerify,omitempty" default:"false"` + SearchBaseDN string `protobuf:"bytes,5,opt,name=search_base_dn,json=searchBaseDn,proto3" json:"searchBaseDN" xml:"searchBaseDN,omitempty"` + SearchFilter string `protobuf:"bytes,6,opt,name=search_filter,json=searchFilter,proto3" json:"searchFilter" xml:"searchFilter,omitempty"` +} + +func (m *LDAPConfiguration) Reset() { *m = LDAPConfiguration{} } +func (m *LDAPConfiguration) String() string { return proto.CompactTextString(m) } +func (*LDAPConfiguration) ProtoMessage() {} +func (*LDAPConfiguration) Descriptor() ([]byte, []int) { + return fileDescriptor_9681ad7e41c73956, []int{0} +} +func (m *LDAPConfiguration) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_LDAPConfiguration.Unmarshal(m, b) +} +func (m *LDAPConfiguration) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_LDAPConfiguration.Marshal(b, m, deterministic) +} +func (m *LDAPConfiguration) XXX_Merge(src proto.Message) { + xxx_messageInfo_LDAPConfiguration.Merge(m, src) +} +func (m *LDAPConfiguration) XXX_Size() int { + return xxx_messageInfo_LDAPConfiguration.Size(m) +} +func (m *LDAPConfiguration) XXX_DiscardUnknown() { + xxx_messageInfo_LDAPConfiguration.DiscardUnknown(m) +} + +var xxx_messageInfo_LDAPConfiguration proto.InternalMessageInfo + +func init() { + proto.RegisterType((*LDAPConfiguration)(nil), "config.LDAPConfiguration") +} + +func init() { + proto.RegisterFile("lib/config/ldapconfiguration.proto", fileDescriptor_9681ad7e41c73956) +} + +var fileDescriptor_9681ad7e41c73956 = []byte{ + // 498 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x53, 0x4d, 0x6f, 0xd3, 0x40, + 0x10, 0xb5, 0x81, 0xba, 0xc4, 0x2a, 0x15, 0x35, 0x50, 0x42, 0x55, 0x79, 0x23, 0xcb, 0x87, 0x20, + 0xa1, 0x44, 0x2a, 0xb7, 0x72, 0xaa, 0xa9, 0x40, 0x42, 0x08, 0x21, 0x17, 0x7a, 0xe0, 0x12, 0xf9, + 0x63, 0x9d, 0xac, 0xea, 0xec, 0x5a, 0xbb, 0xeb, 0xaa, 0xe1, 0x57, 0x40, 0x7f, 0x41, 0x6f, 0xfc, + 0x15, 0x6e, 0xc9, 0x91, 0xd3, 0x4a, 0x4d, 0x2e, 0xc8, 0x47, 0x1f, 0x39, 0xa1, 0xac, 0x9d, 0xc6, + 0x4e, 0xa3, 0xde, 0x66, 0xde, 0x9b, 0x79, 0xf3, 0x76, 0x47, 0xa3, 0x5b, 0x31, 0xf2, 0xbb, 0x01, + 0xc1, 0x11, 0xea, 0x77, 0xe3, 0xd0, 0x4b, 0x8a, 0x30, 0xa5, 0x1e, 0x47, 0x04, 0x77, 0x12, 0x4a, + 0x38, 0x31, 0xb4, 0x02, 0xdc, 0x33, 0x57, 0x6a, 0x39, 0xf5, 0x30, 0x4b, 0x08, 0xe5, 0x45, 0xdd, + 0x5e, 0x03, 0x5e, 0x94, 0xa1, 0xf5, 0x53, 0xd3, 0x77, 0x3e, 0x1e, 0x1f, 0x7d, 0x7e, 0x5b, 0x95, + 0x33, 0xbe, 0xea, 0x9b, 0x5e, 0x18, 0x52, 0xc8, 0x58, 0x53, 0x6d, 0xa9, 0xed, 0x86, 0xf3, 0x26, + 0x13, 0x60, 0x01, 0xe5, 0x02, 0x3c, 0xbf, 0x18, 0xc6, 0x87, 0x56, 0x99, 0xbf, 0x22, 0x43, 0xc4, + 0xe1, 0x30, 0xe1, 0x23, 0x2b, 0x1b, 0xdb, 0x3b, 0xb7, 0x50, 0x77, 0xd1, 0x68, 0x10, 0x7d, 0xd3, + 0x47, 0x38, 0xec, 0x85, 0xb8, 0x79, 0x4f, 0xca, 0x9e, 0x4e, 0x05, 0xd0, 0x1c, 0x84, 0xc3, 0xe3, + 0x4f, 0x99, 0x00, 0x9a, 0x2f, 0xa3, 0x5c, 0x80, 0x5d, 0xa9, 0x5f, 0xa4, 0x75, 0xf9, 0xc7, 0xab, + 0x60, 0x3e, 0xb6, 0xcb, 0xbe, 0xcb, 0x89, 0x5d, 0x6a, 0xb9, 0x05, 0x82, 0x8d, 0x73, 0xbd, 0x71, + 0xf3, 0xf6, 0xe6, 0xfd, 0x96, 0xda, 0xde, 0x3e, 0x78, 0xd6, 0x29, 0x3e, 0xa6, 0x33, 0x7f, 0xf5, + 0x97, 0x05, 0xe9, 0x1c, 0x65, 0x02, 0x2c, 0x6b, 0x73, 0x01, 0x5e, 0x48, 0x0b, 0x37, 0x48, 0xdd, + 0xc5, 0x93, 0x35, 0xb8, 0xbb, 0x6c, 0x37, 0x7e, 0xa9, 0xfa, 0x53, 0x84, 0x19, 0x0c, 0x52, 0x0a, + 0x7b, 0xec, 0x0c, 0x25, 0xbd, 0x73, 0x48, 0x51, 0x34, 0x6a, 0x3e, 0x68, 0xa9, 0xed, 0x87, 0x4e, + 0x9a, 0x09, 0x60, 0x2c, 0xf8, 0x93, 0x33, 0x94, 0x9c, 0x4a, 0x36, 0x17, 0xe0, 0x40, 0x4e, 0xbd, + 0x4d, 0x55, 0xc6, 0xb7, 0x42, 0x18, 0x79, 0x69, 0xcc, 0x0f, 0xad, 0xc8, 0x8b, 0x19, 0x9c, 0xdb, + 0xd9, 0xbf, 0xab, 0xe1, 0xdf, 0xd8, 0xde, 0x90, 0x95, 0xee, 0x9a, 0x91, 0xc6, 0x95, 0xaa, 0x6f, + 0x33, 0xe8, 0xd1, 0x60, 0xd0, 0xf3, 0x3d, 0x06, 0xe7, 0xab, 0xd9, 0x90, 0xab, 0xf9, 0x3e, 0x15, + 0x60, 0xeb, 0x44, 0x32, 0x8e, 0xc7, 0xa0, 0x5c, 0xd0, 0x16, 0xab, 0xe4, 0xb9, 0x00, 0xfb, 0xd2, + 0x6d, 0x15, 0xac, 0x7f, 0xd3, 0xee, 0x7a, 0x2a, 0x1f, 0xdb, 0x35, 0xa5, 0xcb, 0x89, 0x5d, 0x9b, + 0xe4, 0x56, 0x59, 0x6c, 0x10, 0xfd, 0x51, 0xe9, 0x30, 0x42, 0x31, 0x87, 0xb4, 0xa9, 0x49, 0x83, + 0x1f, 0x96, 0x86, 0xde, 0x49, 0x7c, 0xc5, 0x50, 0x01, 0xae, 0x35, 0xb4, 0x4a, 0xb9, 0x35, 0x1d, + 0xe7, 0xfd, 0xef, 0x6b, 0x53, 0x99, 0x5c, 0x9b, 0xca, 0xdf, 0xa9, 0xa9, 0xfc, 0x98, 0x99, 0xca, + 0xd5, 0xcc, 0x54, 0x27, 0x33, 0x53, 0xf9, 0x33, 0x33, 0x95, 0x6f, 0x2f, 0xfb, 0x88, 0x0f, 0x52, + 0xbf, 0x13, 0x90, 0x61, 0x97, 0x8d, 0x70, 0xc0, 0x07, 0x08, 0xf7, 0x2b, 0xd1, 0xf2, 0xf6, 0x7c, + 0x4d, 0xde, 0xd8, 0xeb, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0xca, 0xa1, 0xc5, 0x0d, 0xbc, 0x03, + 0x00, 0x00, +} + +func (m *LDAPConfiguration) ProtoSize() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Address) + if l > 0 { + n += 1 + l + sovLdapconfiguration(uint64(l)) + } + l = len(m.BindDN) + if l > 0 { + n += 1 + l + sovLdapconfiguration(uint64(l)) + } + if m.Transport != 0 { + n += 1 + sovLdapconfiguration(uint64(m.Transport)) + } + if m.InsecureSkipVerify { + n += 2 + } + l = len(m.SearchBaseDN) + if l > 0 { + n += 1 + l + sovLdapconfiguration(uint64(l)) + } + l = len(m.SearchFilter) + if l > 0 { + n += 1 + l + sovLdapconfiguration(uint64(l)) + } + return n +} + +func sovLdapconfiguration(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozLdapconfiguration(x uint64) (n int) { + return sovLdapconfiguration(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} diff --git a/lib/config/ldaptransport.go b/lib/config/ldaptransport.go index 6a8c8e49a..573d61785 100644 --- a/lib/config/ldaptransport.go +++ b/lib/config/ldaptransport.go @@ -6,14 +6,6 @@ package config -type LDAPTransport int - -const ( - LDAPTransportPlain LDAPTransport = iota // default is plain - LDAPTransportTLS - LDAPTransportStartTLS -) - func (t LDAPTransport) String() string { switch t { case LDAPTransportPlain: diff --git a/lib/config/ldaptransport.pb.go b/lib/config/ldaptransport.pb.go new file mode 100644 index 000000000..a5dbe5e29 --- /dev/null +++ b/lib/config/ldaptransport.pb.go @@ -0,0 +1,74 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: lib/config/ldaptransport.proto + +package config + +import ( + fmt "fmt" + _ "github.com/gogo/protobuf/gogoproto" + proto "github.com/gogo/protobuf/proto" + _ "github.com/syncthing/syncthing/proto/ext" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type LDAPTransport int32 + +const ( + LDAPTransportPlain LDAPTransport = 0 + LDAPTransportTLS LDAPTransport = 2 + LDAPTransportStartTLS LDAPTransport = 3 +) + +var LDAPTransport_name = map[int32]string{ + 0: "LDAP_TRANSPORT_PLAIN", + 2: "LDAP_TRANSPORT_TLS", + 3: "LDAP_TRANSPORT_START_TLS", +} + +var LDAPTransport_value = map[string]int32{ + "LDAP_TRANSPORT_PLAIN": 0, + "LDAP_TRANSPORT_TLS": 2, + "LDAP_TRANSPORT_START_TLS": 3, +} + +func (LDAPTransport) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_79795fc8505b82bf, []int{0} +} + +func init() { + proto.RegisterEnum("config.LDAPTransport", LDAPTransport_name, LDAPTransport_value) +} + +func init() { proto.RegisterFile("lib/config/ldaptransport.proto", fileDescriptor_79795fc8505b82bf) } + +var fileDescriptor_79795fc8505b82bf = []byte{ + // 269 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0xcb, 0xc9, 0x4c, 0xd2, + 0x4f, 0xce, 0xcf, 0x4b, 0xcb, 0x4c, 0xd7, 0xcf, 0x49, 0x49, 0x2c, 0x28, 0x29, 0x4a, 0xcc, 0x2b, + 0x2e, 0xc8, 0x2f, 0x2a, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x83, 0xc8, 0x49, 0x29, + 0x17, 0xa5, 0x16, 0xe4, 0x17, 0xeb, 0x83, 0x05, 0x93, 0x4a, 0xd3, 0xf4, 0xd3, 0xf3, 0xd3, 0xf3, + 0xc1, 0x1c, 0x30, 0x0b, 0xa2, 0x58, 0x8a, 0x33, 0xb5, 0x02, 0xaa, 0x4f, 0xeb, 0x23, 0x23, 0x17, + 0xaf, 0x8f, 0x8b, 0x63, 0x40, 0x08, 0xcc, 0x3c, 0x21, 0x37, 0x2e, 0x11, 0x90, 0x40, 0x7c, 0x48, + 0x90, 0xa3, 0x5f, 0x70, 0x80, 0x7f, 0x50, 0x48, 0x7c, 0x80, 0x8f, 0xa3, 0xa7, 0x9f, 0x00, 0x83, + 0x94, 0x4e, 0xd7, 0x5c, 0x05, 0x21, 0x14, 0xc5, 0x01, 0x39, 0x89, 0x99, 0x79, 0x97, 0xfa, 0x54, + 0xb1, 0x88, 0x0a, 0x39, 0x70, 0x09, 0xa1, 0x99, 0x13, 0xe2, 0x13, 0x2c, 0xc0, 0x24, 0xa5, 0xd1, + 0x35, 0x57, 0x41, 0x00, 0x45, 0x7d, 0x88, 0x4f, 0xf0, 0xa5, 0x3e, 0x55, 0x0c, 0x31, 0xa1, 0x00, + 0x2e, 0x09, 0x34, 0x13, 0x82, 0x43, 0x1c, 0xa1, 0xe6, 0x30, 0x4b, 0x19, 0x75, 0xcd, 0x55, 0x10, + 0x45, 0xd1, 0x13, 0x5c, 0x92, 0x08, 0x33, 0x0c, 0xbb, 0x84, 0x14, 0xcb, 0x8a, 0x25, 0x72, 0x0c, + 0x4e, 0xee, 0x27, 0x1e, 0xca, 0x31, 0x5c, 0x78, 0x28, 0xc7, 0xf0, 0xe2, 0x91, 0x1c, 0xc3, 0x84, + 0xc7, 0x72, 0x0c, 0x0b, 0x1e, 0xcb, 0x31, 0x5e, 0x78, 0x2c, 0xc7, 0x70, 0xe3, 0xb1, 0x1c, 0x43, + 0x94, 0x66, 0x7a, 0x66, 0x49, 0x46, 0x69, 0x92, 0x5e, 0x72, 0x7e, 0xae, 0x7e, 0x71, 0x65, 0x5e, + 0x72, 0x49, 0x46, 0x66, 0x5e, 0x3a, 0x12, 0x0b, 0x11, 0x11, 0x49, 0x6c, 0xe0, 0x30, 0x34, 0x06, + 0x04, 0x00, 0x00, 0xff, 0xff, 0xc8, 0x64, 0xce, 0xb9, 0x9d, 0x01, 0x00, 0x00, +} diff --git a/lib/config/observed.go b/lib/config/observed.go deleted file mode 100644 index afe2b0446..000000000 --- a/lib/config/observed.go +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (C) 2018 The Syncthing Authors. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at https://mozilla.org/MPL/2.0/. - -package config - -import ( - "time" - - "github.com/syncthing/syncthing/lib/protocol" -) - -type ObservedFolder struct { - Time time.Time `xml:"time,attr" json:"time"` - ID string `xml:"id,attr" json:"id"` - Label string `xml:"label,attr" json:"label"` -} - -type ObservedDevice struct { - Time time.Time `xml:"time,attr" json:"time"` - ID protocol.DeviceID `xml:"id,attr" json:"deviceID"` - Name string `xml:"name,attr" json:"name"` - Address string `xml:"address,attr" json:"address"` -} diff --git a/lib/config/observed.pb.go b/lib/config/observed.pb.go new file mode 100644 index 000000000..c078702e7 --- /dev/null +++ b/lib/config/observed.pb.go @@ -0,0 +1,175 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: lib/config/observed.proto + +package config + +import ( + fmt "fmt" + proto "github.com/gogo/protobuf/proto" + github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" + _ "github.com/golang/protobuf/ptypes/timestamp" + github_com_syncthing_syncthing_lib_protocol "github.com/syncthing/syncthing/lib/protocol" + _ "github.com/syncthing/syncthing/proto/ext" + math "math" + math_bits "math/bits" + time "time" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf +var _ = time.Kitchen + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type ObservedFolder struct { + Time time.Time `protobuf:"bytes,1,opt,name=time,proto3,stdtime" json:"time" xml:"time,attr"` + ID string `protobuf:"bytes,2,opt,name=id,proto3" json:"id" xml:"id,attr"` + Label string `protobuf:"bytes,3,opt,name=label,proto3" json:"label" xml:"label,attr"` +} + +func (m *ObservedFolder) Reset() { *m = ObservedFolder{} } +func (m *ObservedFolder) String() string { return proto.CompactTextString(m) } +func (*ObservedFolder) ProtoMessage() {} +func (*ObservedFolder) Descriptor() ([]byte, []int) { + return fileDescriptor_49f68ff7b178722f, []int{0} +} +func (m *ObservedFolder) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ObservedFolder.Unmarshal(m, b) +} +func (m *ObservedFolder) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ObservedFolder.Marshal(b, m, deterministic) +} +func (m *ObservedFolder) XXX_Merge(src proto.Message) { + xxx_messageInfo_ObservedFolder.Merge(m, src) +} +func (m *ObservedFolder) XXX_Size() int { + return xxx_messageInfo_ObservedFolder.Size(m) +} +func (m *ObservedFolder) XXX_DiscardUnknown() { + xxx_messageInfo_ObservedFolder.DiscardUnknown(m) +} + +var xxx_messageInfo_ObservedFolder proto.InternalMessageInfo + +type ObservedDevice struct { + Time time.Time `protobuf:"bytes,1,opt,name=time,proto3,stdtime" json:"time" xml:"time,attr"` + ID github_com_syncthing_syncthing_lib_protocol.DeviceID `protobuf:"bytes,2,opt,name=id,proto3,customtype=github.com/syncthing/syncthing/lib/protocol.DeviceID" json:"deviceID" xml:"id,attr"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name" xml:"name,attr"` + Address string `protobuf:"bytes,4,opt,name=address,proto3" json:"address" xml:"address,attr"` +} + +func (m *ObservedDevice) Reset() { *m = ObservedDevice{} } +func (m *ObservedDevice) String() string { return proto.CompactTextString(m) } +func (*ObservedDevice) ProtoMessage() {} +func (*ObservedDevice) Descriptor() ([]byte, []int) { + return fileDescriptor_49f68ff7b178722f, []int{1} +} +func (m *ObservedDevice) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ObservedDevice.Unmarshal(m, b) +} +func (m *ObservedDevice) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ObservedDevice.Marshal(b, m, deterministic) +} +func (m *ObservedDevice) XXX_Merge(src proto.Message) { + xxx_messageInfo_ObservedDevice.Merge(m, src) +} +func (m *ObservedDevice) XXX_Size() int { + return xxx_messageInfo_ObservedDevice.Size(m) +} +func (m *ObservedDevice) XXX_DiscardUnknown() { + xxx_messageInfo_ObservedDevice.DiscardUnknown(m) +} + +var xxx_messageInfo_ObservedDevice proto.InternalMessageInfo + +func init() { + proto.RegisterType((*ObservedFolder)(nil), "config.ObservedFolder") + proto.RegisterType((*ObservedDevice)(nil), "config.ObservedDevice") +} + +func init() { proto.RegisterFile("lib/config/observed.proto", fileDescriptor_49f68ff7b178722f) } + +var fileDescriptor_49f68ff7b178722f = []byte{ + // 438 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x93, 0x3f, 0x6f, 0xd4, 0x30, + 0x00, 0xc5, 0xe3, 0xf4, 0x68, 0x39, 0x53, 0xfe, 0x28, 0xd3, 0x71, 0x43, 0x5c, 0x9d, 0x32, 0x1c, + 0x02, 0x25, 0xfc, 0x9b, 0x10, 0x42, 0x22, 0x8a, 0x40, 0x27, 0x06, 0xa4, 0x88, 0x89, 0x89, 0x24, + 0x76, 0x53, 0x4b, 0x49, 0x5c, 0x25, 0x6e, 0x55, 0x36, 0x46, 0xc6, 0x96, 0x4f, 0xc0, 0xc7, 0xe9, + 0x76, 0x19, 0x11, 0x83, 0x51, 0x9b, 0x05, 0x65, 0x8c, 0xc4, 0x8e, 0x62, 0x27, 0xee, 0x4d, 0x88, + 0xa9, 0x9b, 0xdf, 0xd3, 0xf3, 0x4f, 0x7e, 0x2f, 0x0a, 0xbc, 0x9f, 0xd1, 0xd8, 0x4b, 0x58, 0xb1, + 0x4f, 0x53, 0x8f, 0xc5, 0x15, 0x29, 0x8f, 0x09, 0x76, 0x0f, 0x4b, 0xc6, 0x99, 0xb5, 0xad, 0xec, + 0x39, 0x4a, 0x19, 0x4b, 0x33, 0xe2, 0x49, 0x37, 0x3e, 0xda, 0xf7, 0x38, 0xcd, 0x49, 0xc5, 0xa3, + 0xfc, 0x50, 0x05, 0xe7, 0x53, 0x72, 0xc2, 0xd5, 0x71, 0xf1, 0x07, 0xc0, 0x3b, 0xef, 0x07, 0xcc, + 0x1b, 0x96, 0x61, 0x52, 0x5a, 0x9f, 0xe0, 0xa4, 0xbf, 0x30, 0x03, 0x7b, 0x60, 0x79, 0xeb, 0xe9, + 0xdc, 0x55, 0x34, 0x77, 0xa4, 0xb9, 0x1f, 0x46, 0x9a, 0xff, 0xf8, 0x5c, 0x20, 0xa3, 0x15, 0x48, + 0xe6, 0x3b, 0x81, 0xee, 0x9e, 0xe4, 0xd9, 0x8b, 0x45, 0x2f, 0x1e, 0x45, 0x9c, 0x97, 0x8b, 0xd3, + 0x5f, 0x08, 0xb4, 0x6b, 0x67, 0xaa, 0x9d, 0x50, 0x26, 0xad, 0x57, 0xd0, 0xa4, 0x78, 0x66, 0xee, + 0x81, 0xe5, 0xd4, 0x77, 0x2f, 0x05, 0x32, 0x57, 0x41, 0x2b, 0x90, 0x49, 0x71, 0x27, 0xd0, 0x6d, + 0xc9, 0xa0, 0x58, 0x11, 0xda, 0xb5, 0xb3, 0x33, 0x9c, 0xbf, 0xd5, 0x8e, 0xb9, 0x0a, 0x42, 0x93, + 0x62, 0xeb, 0x35, 0xbc, 0x91, 0x45, 0x31, 0xc9, 0x66, 0x5b, 0x12, 0xf1, 0xb0, 0x15, 0x48, 0x19, + 0x9d, 0x40, 0xf7, 0xe4, 0x7d, 0xa9, 0x34, 0x02, 0x5e, 0xc9, 0x50, 0x05, 0x17, 0x67, 0x5b, 0x57, + 0xbd, 0x03, 0x72, 0x4c, 0x13, 0x72, 0x0d, 0xbd, 0xcf, 0x80, 0x2e, 0xbe, 0xeb, 0x7f, 0x01, 0x3d, + 0xe5, 0xa7, 0x40, 0xcf, 0x53, 0xca, 0x0f, 0x8e, 0x62, 0x37, 0x61, 0xb9, 0x57, 0x7d, 0x2e, 0x12, + 0x7e, 0x40, 0x8b, 0x74, 0xe3, 0xd4, 0x7f, 0x70, 0xf9, 0x88, 0x84, 0x65, 0xae, 0x7a, 0xeb, 0x2a, + 0xd0, 0xab, 0xdd, 0xc4, 0x83, 0xf3, 0xaf, 0xed, 0xba, 0xb5, 0xa3, 0x73, 0x5f, 0x6b, 0x07, 0x6c, + 0x6c, 0xf9, 0x12, 0x4e, 0x8a, 0x28, 0x27, 0xc3, 0x94, 0xcb, 0xbe, 0x55, 0xaf, 0x75, 0xab, 0x5e, + 0x68, 0xde, 0x54, 0xab, 0x50, 0xa6, 0xac, 0x77, 0x70, 0x27, 0xc2, 0xb8, 0x24, 0x55, 0x35, 0x9b, + 0x48, 0xc0, 0x93, 0x56, 0xa0, 0xd1, 0xea, 0x04, 0xb2, 0x24, 0x63, 0xd0, 0x1a, 0xb3, 0xbb, 0x69, + 0x84, 0x63, 0xdc, 0x7f, 0x7b, 0x7e, 0x61, 0x1b, 0xf5, 0x85, 0x6d, 0xfc, 0xbe, 0xb4, 0x8d, 0xd3, + 0xc6, 0x36, 0xbe, 0x37, 0x36, 0xa8, 0x1b, 0xdb, 0xf8, 0xd1, 0xd8, 0xc6, 0xc7, 0x07, 0xff, 0x31, + 0x93, 0xfa, 0x01, 0xe2, 0x6d, 0x39, 0xd7, 0xb3, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xfb, 0xcb, + 0x46, 0x92, 0x2c, 0x03, 0x00, 0x00, +} + +func (m *ObservedFolder) ProtoSize() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = github_com_gogo_protobuf_types.SizeOfStdTime(m.Time) + n += 1 + l + sovObserved(uint64(l)) + l = len(m.ID) + if l > 0 { + n += 1 + l + sovObserved(uint64(l)) + } + l = len(m.Label) + if l > 0 { + n += 1 + l + sovObserved(uint64(l)) + } + return n +} + +func (m *ObservedDevice) ProtoSize() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = github_com_gogo_protobuf_types.SizeOfStdTime(m.Time) + n += 1 + l + sovObserved(uint64(l)) + l = m.ID.ProtoSize() + n += 1 + l + sovObserved(uint64(l)) + l = len(m.Name) + if l > 0 { + n += 1 + l + sovObserved(uint64(l)) + } + l = len(m.Address) + if l > 0 { + n += 1 + l + sovObserved(uint64(l)) + } + return n +} + +func sovObserved(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozObserved(x uint64) (n int) { + return sovObserved(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} diff --git a/lib/config/optionsconfiguration.go b/lib/config/optionsconfiguration.go index d73426d29..7f684644a 100644 --- a/lib/config/optionsconfiguration.go +++ b/lib/config/optionsconfiguration.go @@ -15,63 +15,6 @@ import ( "github.com/syncthing/syncthing/lib/util" ) -type OptionsConfiguration struct { - RawListenAddresses []string `xml:"listenAddress" json:"listenAddresses" default:"default"` - RawGlobalAnnServers []string `xml:"globalAnnounceServer" json:"globalAnnounceServers" default:"default"` - GlobalAnnEnabled bool `xml:"globalAnnounceEnabled" json:"globalAnnounceEnabled" default:"true"` - LocalAnnEnabled bool `xml:"localAnnounceEnabled" json:"localAnnounceEnabled" default:"true"` - LocalAnnPort int `xml:"localAnnouncePort" json:"localAnnouncePort" default:"21027"` - LocalAnnMCAddr string `xml:"localAnnounceMCAddr" json:"localAnnounceMCAddr" default:"[ff12::8384]:21027"` - MaxSendKbps int `xml:"maxSendKbps" json:"maxSendKbps"` - MaxRecvKbps int `xml:"maxRecvKbps" json:"maxRecvKbps"` - ReconnectIntervalS int `xml:"reconnectionIntervalS" json:"reconnectionIntervalS" default:"60"` - RelaysEnabled bool `xml:"relaysEnabled" json:"relaysEnabled" default:"true"` - RelayReconnectIntervalM int `xml:"relayReconnectIntervalM" json:"relayReconnectIntervalM" default:"10"` - StartBrowser bool `xml:"startBrowser" json:"startBrowser" default:"true"` - NATEnabled bool `xml:"natEnabled" json:"natEnabled" default:"true"` - NATLeaseM int `xml:"natLeaseMinutes" json:"natLeaseMinutes" default:"60"` - NATRenewalM int `xml:"natRenewalMinutes" json:"natRenewalMinutes" default:"30"` - NATTimeoutS int `xml:"natTimeoutSeconds" json:"natTimeoutSeconds" default:"10"` - URAccepted int `xml:"urAccepted" json:"urAccepted"` // Accepted usage reporting version; 0 for off (undecided), -1 for off (permanently) - URSeen int `xml:"urSeen" json:"urSeen"` // Report which the user has been prompted for. - URUniqueID string `xml:"urUniqueID" json:"urUniqueId"` // Unique ID for reporting purposes, regenerated when UR is turned on. - URURL string `xml:"urURL" json:"urURL" default:"https://data.syncthing.net/newdata"` // usage reporting URL - URPostInsecurely bool `xml:"urPostInsecurely" json:"urPostInsecurely" default:"false"` // For testing - URInitialDelayS int `xml:"urInitialDelayS" json:"urInitialDelayS" default:"1800"` - RestartOnWakeup bool `xml:"restartOnWakeup" json:"restartOnWakeup" default:"true"` - AutoUpgradeIntervalH int `xml:"autoUpgradeIntervalH" json:"autoUpgradeIntervalH" default:"12"` // 0 for off - UpgradeToPreReleases bool `xml:"upgradeToPreReleases" json:"upgradeToPreReleases"` // when auto upgrades are enabled - KeepTemporariesH int `xml:"keepTemporariesH" json:"keepTemporariesH" default:"24"` // 0 for off - CacheIgnoredFiles bool `xml:"cacheIgnoredFiles" json:"cacheIgnoredFiles" default:"false"` - ProgressUpdateIntervalS int `xml:"progressUpdateIntervalS" json:"progressUpdateIntervalS" default:"5"` - LimitBandwidthInLan bool `xml:"limitBandwidthInLan" json:"limitBandwidthInLan" default:"false"` - MinHomeDiskFree Size `xml:"minHomeDiskFree" json:"minHomeDiskFree" default:"1 %"` - ReleasesURL string `xml:"releasesURL" json:"releasesURL" default:"https://upgrades.syncthing.net/meta.json"` - AlwaysLocalNets []string `xml:"alwaysLocalNet" json:"alwaysLocalNets"` - OverwriteRemoteDevNames bool `xml:"overwriteRemoteDeviceNamesOnConnect" json:"overwriteRemoteDeviceNamesOnConnect" default:"false"` - TempIndexMinBlocks int `xml:"tempIndexMinBlocks" json:"tempIndexMinBlocks" default:"10"` - UnackedNotificationIDs []string `xml:"unackedNotificationID" json:"unackedNotificationIDs"` - TrafficClass int `xml:"trafficClass" json:"trafficClass"` - DefaultFolderPath string `xml:"defaultFolderPath" json:"defaultFolderPath" default:"~"` - SetLowPriority bool `xml:"setLowPriority" json:"setLowPriority" default:"true"` - RawMaxFolderConcurrency int `xml:"maxFolderConcurrency" json:"maxFolderConcurrency"` - CRURL string `xml:"crashReportingURL" json:"crURL" default:"https://crash.syncthing.net/newcrash"` // crash reporting URL - CREnabled bool `xml:"crashReportingEnabled" json:"crashReportingEnabled" default:"true"` // Read in the monitor, but it's read before every attempt to report stuff, so does not require a restart. - StunKeepaliveStartS int `xml:"stunKeepaliveStartS" json:"stunKeepaliveStartS" default:"180"` // 0 for off - StunKeepaliveMinS int `xml:"stunKeepaliveMinS" json:"stunKeepaliveMinS" default:"20"` // 0 for off - RawStunServers []string `xml:"stunServer" json:"stunServers" default:"default"` - DatabaseTuning Tuning `xml:"databaseTuning" json:"databaseTuning" restart:"true"` // Can't be adjusted once the database has been opened - RawMaxCIRequestKiB int `xml:"maxConcurrentIncomingRequestKiB" json:"maxConcurrentIncomingRequestKiB"` - - DeprecatedUPnPEnabled bool `xml:"upnpEnabled,omitempty" json:"-"` - DeprecatedUPnPLeaseM int `xml:"upnpLeaseMinutes,omitempty" json:"-"` - DeprecatedUPnPRenewalM int `xml:"upnpRenewalMinutes,omitempty" json:"-"` - DeprecatedUPnPTimeoutS int `xml:"upnpTimeoutSeconds,omitempty" json:"-"` - DeprecatedRelayServers []string `xml:"relayServer,omitempty" json:"-"` - DeprecatedMinHomeDiskFreePct float64 `xml:"minHomeDiskFreePct,omitempty" json:"-"` - DeprecatedMaxConcurrentScans int `xml:"maxConcurrentScans,omitempty" json:"-"` -} - func (opts OptionsConfiguration) Copy() OptionsConfiguration { optsCopy := opts optsCopy.RawListenAddresses = make([]string, len(opts.RawListenAddresses)) diff --git a/lib/config/optionsconfiguration.pb.go b/lib/config/optionsconfiguration.pb.go new file mode 100644 index 000000000..342ec2612 --- /dev/null +++ b/lib/config/optionsconfiguration.pb.go @@ -0,0 +1,502 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: lib/config/optionsconfiguration.proto + +package config + +import ( + fmt "fmt" + proto "github.com/gogo/protobuf/proto" + _ "github.com/syncthing/syncthing/proto/ext" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type OptionsConfiguration struct { + RawListenAddresses []string `protobuf:"bytes,1,rep,name=listen_addresses,json=listenAddresses,proto3" json:"listenAddresses" xml:"listenAddress" default:"default"` + RawGlobalAnnServers []string `protobuf:"bytes,2,rep,name=global_discovery_servers,json=globalDiscoveryServers,proto3" json:"globalAnnounceServers" xml:"globalAnnounceServer" default:"default"` + GlobalAnnEnabled bool `protobuf:"varint,3,opt,name=global_discovery_enabled,json=globalDiscoveryEnabled,proto3" json:"globalAnnounceEnabled" xml:"globalAnnounceEnabled" default:"true"` + LocalAnnEnabled bool `protobuf:"varint,4,opt,name=local_discovery_enabled,json=localDiscoveryEnabled,proto3" json:"localAnnounceEnabled" xml:"localAnnounceEnabled" default:"true"` + LocalAnnPort int `protobuf:"varint,5,opt,name=local_announce_port,json=localAnnouncePort,proto3,casttype=int" json:"localAnnouncePort" xml:"localAnnouncePort" default:"21027"` + LocalAnnMCAddr string `protobuf:"bytes,6,opt,name=local_announce_multicast_address,json=localAnnounceMulticastAddress,proto3" json:"localAnnounceMCAddr" xml:"localAnnounceMCAddr" default:"[ff12::8384]:21027"` + MaxSendKbps int `protobuf:"varint,7,opt,name=max_send_kbps,json=maxSendKbps,proto3,casttype=int" json:"maxSendKbps" xml:"maxSendKbps"` + MaxRecvKbps int `protobuf:"varint,8,opt,name=max_recv_kbps,json=maxRecvKbps,proto3,casttype=int" json:"maxRecvKbps" xml:"maxRecvKbps"` + ReconnectIntervalS int `protobuf:"varint,9,opt,name=reconnection_interval_s,json=reconnectionIntervalS,proto3,casttype=int" json:"reconnectionIntervalS" xml:"reconnectionIntervalS" default:"60"` + RelaysEnabled bool `protobuf:"varint,10,opt,name=relays_enabled,json=relaysEnabled,proto3" json:"relaysEnabled" xml:"relaysEnabled" default:"true"` + RelayReconnectIntervalM int `protobuf:"varint,11,opt,name=relays_reconnect_interval_m,json=relaysReconnectIntervalM,proto3,casttype=int" json:"relayReconnectIntervalM" xml:"relayReconnectIntervalM" default:"10"` + StartBrowser bool `protobuf:"varint,12,opt,name=start_browser,json=startBrowser,proto3" json:"startBrowser" xml:"startBrowser" default:"true"` + NATEnabled bool `protobuf:"varint,14,opt,name=nat_traversal_enabled,json=natTraversalEnabled,proto3" json:"natEnabled" xml:"natEnabled" default:"true"` + NATLeaseM int `protobuf:"varint,15,opt,name=nat_traversal_lease_m,json=natTraversalLeaseM,proto3,casttype=int" json:"natLeaseMinutes" xml:"natLeaseMinutes" default:"60"` + NATRenewalM int `protobuf:"varint,16,opt,name=nat_traversal_renewal_m,json=natTraversalRenewalM,proto3,casttype=int" json:"natRenewalMinutes" xml:"natRenewalMinutes" default:"30"` + NATTimeoutS int `protobuf:"varint,17,opt,name=nat_traversal_timeout_s,json=natTraversalTimeoutS,proto3,casttype=int" json:"natTimeoutSeconds" xml:"natTimeoutSeconds" default:"10"` + URAccepted int `protobuf:"varint,18,opt,name=usage_reporting_accepted,json=usageReportingAccepted,proto3,casttype=int" json:"urAccepted" xml:"urAccepted"` + URSeen int `protobuf:"varint,19,opt,name=usage_reporting_seen,json=usageReportingSeen,proto3,casttype=int" json:"urSeen" xml:"urSeen"` + URUniqueID string `protobuf:"bytes,20,opt,name=usage_reporting_unique_id,json=usageReportingUniqueId,proto3" json:"urUniqueId" xml:"urUniqueID"` + URURL string `protobuf:"bytes,21,opt,name=usage_reporting_url,json=usageReportingUrl,proto3" json:"urURL" xml:"urURL" default:"https://data.syncthing.net/newdata"` + URPostInsecurely bool `protobuf:"varint,22,opt,name=usage_reporting_post_insecurely,json=usageReportingPostInsecurely,proto3" json:"urPostInsecurely" xml:"urPostInsecurely" default:"false"` + URInitialDelayS int `protobuf:"varint,23,opt,name=usage_reporting_initial_delay_s,json=usageReportingInitialDelayS,proto3,casttype=int" json:"urInitialDelayS" xml:"urInitialDelayS" default:"1800"` + RestartOnWakeup bool `protobuf:"varint,24,opt,name=restart_on_wakeup,json=restartOnWakeup,proto3" json:"restartOnWakeup" xml:"restartOnWakeup" default:"true"` + AutoUpgradeIntervalH int `protobuf:"varint,25,opt,name=auto_upgrade_interval_h,json=autoUpgradeIntervalH,proto3,casttype=int" json:"autoUpgradeIntervalH" xml:"autoUpgradeIntervalH" default:"12"` + UpgradeToPreReleases bool `protobuf:"varint,26,opt,name=upgrade_to_pre_releases,json=upgradeToPreReleases,proto3" json:"upgradeToPreReleases" xml:"upgradeToPreReleases"` + KeepTemporariesH int `protobuf:"varint,27,opt,name=keep_temporaries_h,json=keepTemporariesH,proto3,casttype=int" json:"keepTemporariesH" xml:"keepTemporariesH" default:"24"` + CacheIgnoredFiles bool `protobuf:"varint,28,opt,name=cache_ignored_files,json=cacheIgnoredFiles,proto3" json:"cacheIgnoredFiles" xml:"cacheIgnoredFiles" default:"false"` + ProgressUpdateIntervalS int `protobuf:"varint,29,opt,name=progress_update_interval_s,json=progressUpdateIntervalS,proto3,casttype=int" json:"progressUpdateIntervalS" xml:"progressUpdateIntervalS" default:"5"` + LimitBandwidthInLan bool `protobuf:"varint,30,opt,name=limit_bandwidth_in_lan,json=limitBandwidthInLan,proto3" json:"limitBandwidthInLan" xml:"limitBandwidthInLan" default:"false"` + MinHomeDiskFree Size `protobuf:"bytes,31,opt,name=min_home_disk_free,json=minHomeDiskFree,proto3" json:"minHomeDiskFree" xml:"minHomeDiskFree" default:"1 %"` + ReleasesURL string `protobuf:"bytes,32,opt,name=releases_url,json=releasesUrl,proto3" json:"releasesURL" xml:"releasesURL" default:"https://upgrades.syncthing.net/meta.json"` + AlwaysLocalNets []string `protobuf:"bytes,33,rep,name=always_local_nets,json=alwaysLocalNets,proto3" json:"alwaysLocalNets" xml:"alwaysLocalNet"` + OverwriteRemoteDevNames bool `protobuf:"varint,34,opt,name=overwrite_remote_device_names_on_connect,json=overwriteRemoteDeviceNamesOnConnect,proto3" json:"overwriteRemoteDeviceNamesOnConnect" xml:"overwriteRemoteDeviceNamesOnConnect" default:"false"` + TempIndexMinBlocks int `protobuf:"varint,35,opt,name=temp_index_min_blocks,json=tempIndexMinBlocks,proto3,casttype=int" json:"tempIndexMinBlocks" xml:"tempIndexMinBlocks" default:"10"` + UnackedNotificationIDs []string `protobuf:"bytes,36,rep,name=unacked_notification_ids,json=unackedNotificationIds,proto3" json:"unackedNotificationIDs" xml:"unackedNotificationID"` + TrafficClass int `protobuf:"varint,37,opt,name=traffic_class,json=trafficClass,proto3,casttype=int" json:"trafficClass" xml:"trafficClass"` + DefaultFolderPath string `protobuf:"bytes,38,opt,name=default_folder_path,json=defaultFolderPath,proto3" json:"defaultFolderPath" xml:"defaultFolderPath" default:"~"` + SetLowPriority bool `protobuf:"varint,39,opt,name=set_low_priority,json=setLowPriority,proto3" json:"setLowPriority" xml:"setLowPriority" default:"true"` + RawMaxFolderConcurrency int `protobuf:"varint,40,opt,name=max_folder_concurrency,json=maxFolderConcurrency,proto3,casttype=int" json:"maxFolderConcurrency" xml:"maxFolderConcurrency"` + CRURL string `protobuf:"bytes,41,opt,name=crash_reporting_url,json=crashReportingUrl,proto3" json:"crURL" xml:"crashReportingURL" default:"https://crash.syncthing.net/newcrash"` + CREnabled bool `protobuf:"varint,42,opt,name=crash_reporting_enabled,json=crashReportingEnabled,proto3" json:"crashReportingEnabled" xml:"crashReportingEnabled" default:"true"` + StunKeepaliveStartS int `protobuf:"varint,43,opt,name=stun_keepalive_start_s,json=stunKeepaliveStartS,proto3,casttype=int" json:"stunKeepaliveStartS" xml:"stunKeepaliveStartS" default:"180"` + StunKeepaliveMinS int `protobuf:"varint,44,opt,name=stun_keepalive_min_s,json=stunKeepaliveMinS,proto3,casttype=int" json:"stunKeepaliveMinS" xml:"stunKeepaliveMinS" default:"20"` + RawStunServers []string `protobuf:"bytes,45,rep,name=stun_servers,json=stunServers,proto3" json:"stunServers" xml:"stunServer" default:"default"` + DatabaseTuning Tuning `protobuf:"varint,46,opt,name=database_tuning,json=databaseTuning,proto3,enum=config.Tuning" json:"databaseTuning" xml:"databaseTuning" restart:"true"` + RawMaxCIRequestKiB int `protobuf:"varint,47,opt,name=max_concurrent_incoming_request_kib,json=maxConcurrentIncomingRequestKib,proto3,casttype=int" json:"maxConcurrentIncomingRequestKiB" xml:"maxConcurrentIncomingRequestKiB"` + // Legacy deprecated + DeprecatedUPnPEnabled bool `protobuf:"varint,9000,opt,name=upnp_enabled,json=upnpEnabled,proto3" json:"-" xml:"upnpEnabled,omitempty"` // Deprecated: Do not use. + DeprecatedUPnPLeaseM int `protobuf:"varint,9001,opt,name=upnp_lease_m,json=upnpLeaseM,proto3,casttype=int" json:"-" xml:"upnpLeaseMinutes,omitempty"` // Deprecated: Do not use. + DeprecatedUPnPRenewalM int `protobuf:"varint,9002,opt,name=upnp_renewal_m,json=upnpRenewalM,proto3,casttype=int" json:"-" xml:"upnpRenewalMinutes,omitempty"` // Deprecated: Do not use. + DeprecatedUPnPTimeoutS int `protobuf:"varint,9003,opt,name=upnp_timeout_s,json=upnpTimeoutS,proto3,casttype=int" json:"-" xml:"upnpTimeoutSeconds,omitempty"` // Deprecated: Do not use. + DeprecatedRelayServers []string `protobuf:"bytes,9004,rep,name=relay_servers,json=relayServers,proto3" json:"-" xml:"relayServer,omitempty"` // Deprecated: Do not use. + DeprecatedMinHomeDiskFreePct float64 `protobuf:"fixed64,9005,opt,name=min_home_disk_free_pct,json=minHomeDiskFreePct,proto3" json:"-" xml:"minHomeDiskFreePct,omitempty"` // Deprecated: Do not use. + DeprecatedMaxConcurrentScans int `protobuf:"varint,9006,opt,name=max_concurrent_scans,json=maxConcurrentScans,proto3,casttype=int" json:"-" xml:"maxConcurrentScans,omitempty"` // Deprecated: Do not use. +} + +func (m *OptionsConfiguration) Reset() { *m = OptionsConfiguration{} } +func (m *OptionsConfiguration) String() string { return proto.CompactTextString(m) } +func (*OptionsConfiguration) ProtoMessage() {} +func (*OptionsConfiguration) Descriptor() ([]byte, []int) { + return fileDescriptor_d09882599506ca03, []int{0} +} +func (m *OptionsConfiguration) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_OptionsConfiguration.Unmarshal(m, b) +} +func (m *OptionsConfiguration) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_OptionsConfiguration.Marshal(b, m, deterministic) +} +func (m *OptionsConfiguration) XXX_Merge(src proto.Message) { + xxx_messageInfo_OptionsConfiguration.Merge(m, src) +} +func (m *OptionsConfiguration) XXX_Size() int { + return xxx_messageInfo_OptionsConfiguration.Size(m) +} +func (m *OptionsConfiguration) XXX_DiscardUnknown() { + xxx_messageInfo_OptionsConfiguration.DiscardUnknown(m) +} + +var xxx_messageInfo_OptionsConfiguration proto.InternalMessageInfo + +func init() { + proto.RegisterType((*OptionsConfiguration)(nil), "config.OptionsConfiguration") +} + +func init() { + proto.RegisterFile("lib/config/optionsconfiguration.proto", fileDescriptor_d09882599506ca03) +} + +var fileDescriptor_d09882599506ca03 = []byte{ + // 3006 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x5a, 0x5b, 0x6c, 0x24, 0x47, + 0xd5, 0x76, 0xef, 0x66, 0x37, 0xd9, 0xb6, 0xd7, 0x5e, 0xb7, 0x6f, 0x9d, 0xdd, 0x8d, 0xdb, 0x99, + 0x9d, 0x4d, 0x9c, 0x9b, 0x6f, 0x9b, 0xec, 0xbf, 0xff, 0x4a, 0xbf, 0x7e, 0x7c, 0x89, 0x13, 0x13, + 0x7b, 0xd7, 0x2a, 0xdb, 0x0a, 0x0a, 0x42, 0xad, 0x9a, 0x9e, 0xb2, 0xdd, 0xb8, 0xa7, 0x7a, 0xb6, + 0xab, 0xda, 0x97, 0x80, 0x42, 0x14, 0xc4, 0xe5, 0x0d, 0xb0, 0xb8, 0x48, 0x20, 0xa1, 0x20, 0x40, + 0x22, 0x04, 0x10, 0x12, 0x12, 0x12, 0x48, 0x08, 0x84, 0x84, 0x14, 0xc1, 0x83, 0xfd, 0x88, 0x44, + 0x68, 0x14, 0x2f, 0x0f, 0x68, 0x1e, 0x78, 0x98, 0x47, 0xf3, 0x82, 0x4e, 0xf5, 0xad, 0xfa, 0x32, + 0xd9, 0x7d, 0x9b, 0x3a, 0xdf, 0xa9, 0x53, 0xdf, 0x39, 0x55, 0x75, 0xaa, 0x4e, 0xf5, 0xa8, 0xd7, + 0x1d, 0xbb, 0x36, 0x69, 0xb9, 0x74, 0xd3, 0xde, 0x9a, 0x74, 0x9b, 0xdc, 0x76, 0x29, 0x0b, 0x5b, + 0xbe, 0x87, 0xa1, 0x35, 0xd1, 0xf4, 0x5c, 0xee, 0x6a, 0xe7, 0x43, 0xe1, 0xe5, 0x11, 0x49, 0x9d, + 0xfb, 0xd4, 0xa6, 0x5b, 0xa1, 0xc2, 0xe5, 0x21, 0x09, 0x60, 0xf6, 0x9b, 0x24, 0x12, 0x5f, 0x20, + 0xfb, 0x3c, 0xfc, 0x59, 0xf9, 0xdd, 0xbc, 0x3a, 0x78, 0x37, 0x1c, 0x61, 0x5e, 0x1e, 0x41, 0xfb, + 0xbe, 0xa2, 0x5e, 0x72, 0x6c, 0xc6, 0x09, 0x35, 0x71, 0xbd, 0xee, 0x11, 0xc6, 0x08, 0xd3, 0x95, + 0xb1, 0xb3, 0xe3, 0x17, 0xe6, 0xd8, 0x49, 0x60, 0x68, 0x08, 0xef, 0x2d, 0x0b, 0x78, 0x36, 0x46, + 0x5b, 0x81, 0xd1, 0xe7, 0x64, 0x45, 0xed, 0xc0, 0xb8, 0xbe, 0xdf, 0x70, 0x6e, 0x57, 0x32, 0xf2, + 0xca, 0x58, 0x9d, 0x6c, 0x62, 0xdf, 0xe1, 0xb7, 0x2b, 0xd1, 0x8f, 0xca, 0xe9, 0x51, 0xf5, 0xd1, + 0xe8, 0xf7, 0xe1, 0x71, 0xb5, 0xc4, 0x38, 0xca, 0x9b, 0xd6, 0xfe, 0xad, 0xa8, 0xfa, 0x96, 0xe3, + 0xd6, 0xb0, 0x63, 0xd6, 0x6d, 0x66, 0xb9, 0xbb, 0xc4, 0x3b, 0x30, 0x19, 0xf1, 0x76, 0x89, 0xc7, + 0xf4, 0x33, 0x82, 0xe8, 0xaf, 0x94, 0x93, 0xc0, 0x18, 0x40, 0x78, 0xef, 0x15, 0xa1, 0x37, 0x4b, + 0xe9, 0x5a, 0x88, 0xb7, 0x02, 0x63, 0x68, 0x2b, 0x96, 0xb9, 0x3e, 0xb5, 0x48, 0x04, 0xb4, 0x03, + 0xe3, 0x79, 0x41, 0xb8, 0x0c, 0x2d, 0xe1, 0xdd, 0x3a, 0xaa, 0x0e, 0x96, 0xa9, 0xb6, 0x8f, 0xaa, + 0xe5, 0x03, 0x64, 0x1d, 0x2d, 0xe3, 0x86, 0x86, 0xc3, 0x8e, 0x0b, 0xb1, 0x53, 0x91, 0x5c, 0xfb, + 0x67, 0x99, 0xc3, 0x84, 0xe2, 0x9a, 0x43, 0xea, 0xfa, 0xd9, 0x31, 0x65, 0xfc, 0xb1, 0xb9, 0xf7, + 0xc0, 0xe1, 0x4b, 0x89, 0xc5, 0x97, 0x43, 0xb0, 0xe8, 0x6d, 0x04, 0xb4, 0x03, 0xe3, 0xd9, 0x12, + 0x6f, 0x23, 0x54, 0x72, 0x97, 0x7b, 0x3e, 0x01, 0x5f, 0x3b, 0x98, 0xe9, 0x04, 0x9c, 0x1e, 0x55, + 0x1f, 0x81, 0xae, 0x87, 0xc7, 0xd5, 0x02, 0xa9, 0x82, 0x9b, 0x91, 0x5c, 0xfb, 0x50, 0x51, 0x47, + 0x1c, 0xd7, 0x2a, 0xf5, 0xf2, 0x11, 0xe1, 0xe5, 0x0f, 0xc1, 0xcb, 0xbe, 0x65, 0xd0, 0xc9, 0x38, + 0x39, 0xe8, 0x44, 0xa2, 0x9c, 0x8f, 0xcf, 0x84, 0x4b, 0xb0, 0x04, 0x2c, 0x71, 0xb1, 0xdc, 0x48, + 0x07, 0xb9, 0xe4, 0x60, 0x9e, 0x0f, 0x1a, 0x12, 0x1d, 0x0a, 0xee, 0xfd, 0x45, 0x51, 0x07, 0x42, + 0xf7, 0x70, 0x64, 0xcb, 0x6c, 0xba, 0x1e, 0xd7, 0xcf, 0x8d, 0x29, 0xe3, 0xe7, 0xe6, 0xbe, 0x0b, + 0xae, 0xf5, 0xc4, 0xa6, 0x56, 0x5d, 0x8f, 0xb7, 0x02, 0xa3, 0x3f, 0x33, 0x34, 0x08, 0xdb, 0x81, + 0xf1, 0x74, 0xd1, 0x29, 0x40, 0x24, 0x8f, 0x66, 0xa6, 0xa7, 0x66, 0xfe, 0xa7, 0x72, 0x1a, 0x18, + 0x67, 0x6d, 0xca, 0x5b, 0x47, 0xd5, 0x12, 0x33, 0x65, 0xc2, 0xd3, 0xa3, 0xea, 0x39, 0xd1, 0xf5, + 0xf0, 0xb8, 0x9a, 0x61, 0x82, 0x8a, 0xba, 0xda, 0x17, 0xcf, 0xa8, 0x63, 0x39, 0x6f, 0x1a, 0xbe, + 0xc3, 0x6d, 0x0b, 0x33, 0x1e, 0xe7, 0x0d, 0xfd, 0xfc, 0x98, 0x32, 0x7e, 0x61, 0xee, 0x37, 0xe0, + 0x5a, 0x6f, 0x6c, 0x70, 0x65, 0x1e, 0x76, 0x72, 0x2b, 0x30, 0x06, 0x32, 0x46, 0x43, 0x71, 0x3b, + 0x30, 0x6e, 0x16, 0xdd, 0x0b, 0x31, 0xc9, 0xc1, 0x4f, 0x6f, 0x6e, 0x4e, 0xcf, 0xdc, 0xbe, 0x7d, + 0xeb, 0xc6, 0xad, 0x17, 0x3f, 0x73, 0x3b, 0xf4, 0xb6, 0x75, 0x54, 0x2d, 0x35, 0x58, 0x2e, 0x3e, + 0x3d, 0xaa, 0x6a, 0x45, 0x23, 0x87, 0xc7, 0xd5, 0x1c, 0x4d, 0xf4, 0x44, 0xb6, 0x73, 0xec, 0x61, + 0x94, 0x8c, 0xb4, 0xbb, 0xea, 0xc5, 0x06, 0xde, 0x37, 0x19, 0xa1, 0x75, 0x73, 0xa7, 0xd6, 0x64, + 0xfa, 0xa3, 0x62, 0x32, 0x9f, 0x6b, 0x05, 0x46, 0x77, 0x03, 0xef, 0xaf, 0x11, 0x5a, 0x7f, 0xad, + 0xd6, 0x84, 0xe4, 0xd2, 0x2f, 0xdc, 0x92, 0x64, 0xf1, 0xfc, 0x20, 0x59, 0x31, 0x36, 0xe8, 0x11, + 0x6b, 0x37, 0x34, 0xf8, 0x58, 0xc6, 0x20, 0x22, 0xd6, 0x6e, 0xde, 0x60, 0x2c, 0xcb, 0x18, 0x8c, + 0x85, 0xda, 0xaf, 0x15, 0x75, 0xc4, 0x23, 0x96, 0x4b, 0x29, 0xb1, 0x20, 0xbd, 0x9b, 0x36, 0xe5, + 0xc4, 0xdb, 0xc5, 0x8e, 0xc9, 0xf4, 0x0b, 0xc2, 0xf6, 0x5b, 0x22, 0xa9, 0xc7, 0x2a, 0x4b, 0x11, + 0xbc, 0x06, 0xb9, 0x43, 0xee, 0x98, 0x00, 0xed, 0xc0, 0x18, 0x17, 0x63, 0x97, 0xa2, 0xd2, 0x2c, + 0xdd, 0x9c, 0x8a, 0x29, 0x9d, 0x1e, 0x55, 0xcf, 0xdc, 0x9c, 0x12, 0xf9, 0xbd, 0x30, 0x0e, 0x2a, + 0x1f, 0x45, 0xdb, 0x54, 0x7b, 0x3d, 0xe2, 0xe0, 0x03, 0x96, 0xe4, 0x00, 0x55, 0xe4, 0x80, 0xff, + 0x6f, 0x05, 0xc6, 0xc5, 0x10, 0x49, 0x37, 0x7a, 0x25, 0x22, 0x24, 0x49, 0xf3, 0x3b, 0x3c, 0xde, + 0xb1, 0x28, 0xdb, 0x59, 0x7b, 0xe7, 0x8c, 0x7a, 0x25, 0x1a, 0x28, 0x21, 0x92, 0x06, 0xa9, 0xa1, + 0x77, 0x8b, 0x20, 0xfd, 0x11, 0xd6, 0xf0, 0x08, 0x02, 0xbd, 0x82, 0x0b, 0x2b, 0xad, 0xc0, 0x18, + 0xf1, 0xca, 0xa1, 0x24, 0xd1, 0x76, 0xc0, 0x25, 0x96, 0xd3, 0x53, 0xd2, 0x96, 0xed, 0x68, 0xaf, + 0x33, 0x04, 0x41, 0x9e, 0x86, 0x20, 0x77, 0xa2, 0x89, 0xf4, 0xd0, 0xcf, 0x22, 0xa2, 0xd5, 0xd4, + 0x8b, 0x8c, 0x63, 0x8f, 0x9b, 0x35, 0xcf, 0xdd, 0x63, 0xc4, 0xd3, 0x7b, 0x44, 0xac, 0xff, 0xaf, + 0x15, 0x18, 0x3d, 0x02, 0x98, 0x0b, 0xe5, 0xed, 0xc0, 0x78, 0x52, 0xb8, 0x23, 0x0b, 0x3b, 0x46, + 0x3a, 0xd3, 0x55, 0xfb, 0xb1, 0xa2, 0x0e, 0x51, 0xcc, 0x4d, 0xee, 0x61, 0x38, 0xd5, 0xb0, 0x93, + 0x4c, 0x6c, 0xaf, 0x18, 0xec, 0xde, 0x49, 0x60, 0xa8, 0x77, 0x66, 0xd7, 0xd3, 0xb4, 0xae, 0x52, + 0xcc, 0xd3, 0x39, 0x36, 0xc4, 0xc0, 0xa9, 0xa8, 0x24, 0x85, 0xcb, 0x1d, 0x32, 0x2d, 0x29, 0x5d, + 0x4b, 0x43, 0xa0, 0x01, 0x8a, 0xf9, 0x7a, 0x4c, 0x27, 0x5e, 0x10, 0xbf, 0x2d, 0xf0, 0x74, 0x08, + 0x66, 0xc4, 0x6c, 0xe8, 0x7d, 0x62, 0x29, 0x7c, 0x19, 0x96, 0xc2, 0x85, 0x3b, 0xb3, 0xeb, 0xcb, + 0x20, 0x86, 0xc9, 0xef, 0xa3, 0x98, 0x87, 0x0d, 0x9b, 0xfa, 0x5c, 0x5c, 0x7e, 0x2a, 0x31, 0x59, + 0x59, 0x5e, 0xba, 0x37, 0x5a, 0x47, 0xd5, 0x42, 0xff, 0xa2, 0x28, 0xd9, 0x41, 0xe9, 0xc0, 0x48, + 0x93, 0xd9, 0x87, 0x32, 0xed, 0xcf, 0x8a, 0x3a, 0x92, 0x25, 0xef, 0x11, 0x4a, 0xf6, 0xc4, 0x4a, + 0xbe, 0x24, 0xe8, 0x1f, 0x02, 0xfd, 0xee, 0x3b, 0xb3, 0xeb, 0x28, 0x04, 0xc0, 0x81, 0x7e, 0x8a, + 0x79, 0xdc, 0x4c, 0x5c, 0xa8, 0xc6, 0x2e, 0x64, 0x11, 0xc9, 0x89, 0x1b, 0xb2, 0x13, 0x25, 0x36, + 0xca, 0x84, 0xe0, 0xc8, 0x0d, 0x70, 0x44, 0xa6, 0x80, 0x06, 0x65, 0x57, 0x62, 0x69, 0x89, 0x33, + 0xdc, 0x6e, 0x10, 0xd7, 0xe7, 0x26, 0xd3, 0xfb, 0xb3, 0xce, 0xac, 0x87, 0xc0, 0x5a, 0xe4, 0x4c, + 0xdc, 0x84, 0x95, 0x5e, 0xcf, 0x38, 0x93, 0x45, 0x3a, 0x6d, 0xbf, 0x12, 0x1b, 0x65, 0xc2, 0x64, + 0xcb, 0xc9, 0x14, 0xb2, 0xce, 0xc4, 0x52, 0xed, 0x7b, 0x8a, 0xaa, 0xfb, 0x0c, 0x6f, 0x11, 0xd3, + 0x23, 0x70, 0xee, 0xdb, 0x74, 0xcb, 0xc4, 0x96, 0x45, 0x9a, 0x9c, 0xd4, 0x75, 0x4d, 0x78, 0x83, + 0x61, 0x07, 0x6c, 0xa0, 0xd9, 0x48, 0x0a, 0x3b, 0xc0, 0xf7, 0xe2, 0x56, 0x3b, 0x30, 0x2e, 0x09, + 0x27, 0x52, 0x91, 0x44, 0x58, 0x56, 0xcc, 0xb4, 0x60, 0xc5, 0xa7, 0x26, 0xd1, 0xb0, 0xa0, 0x80, + 0x62, 0x06, 0xb1, 0x5c, 0xfb, 0x9c, 0x3a, 0x98, 0x27, 0xc7, 0x08, 0xa1, 0xfa, 0x80, 0x20, 0xb6, + 0x74, 0x12, 0x18, 0xe7, 0x37, 0xd0, 0x1a, 0x21, 0xb4, 0x15, 0x18, 0xe7, 0x7d, 0x0f, 0x7e, 0xb5, + 0x03, 0xa3, 0x27, 0x22, 0x04, 0x4d, 0x89, 0x4c, 0xac, 0x90, 0xfc, 0x3a, 0x3c, 0xae, 0x46, 0xdd, + 0x91, 0x96, 0x25, 0x00, 0x32, 0xed, 0x5b, 0x8a, 0xfa, 0x78, 0x7e, 0x74, 0x9f, 0xda, 0xf7, 0x7c, + 0x62, 0xda, 0x75, 0x7d, 0x50, 0x5c, 0x22, 0xde, 0x08, 0x63, 0xb3, 0x21, 0xc4, 0x4b, 0x0b, 0x61, + 0x6c, 0xa2, 0x96, 0x1c, 0x9b, 0x58, 0xa1, 0x12, 0x06, 0x25, 0x6e, 0xb6, 0xe5, 0x56, 0x14, 0x94, + 0x18, 0xcb, 0x07, 0x25, 0xd6, 0xd2, 0xfe, 0xa0, 0xa8, 0x03, 0x05, 0x5e, 0x9e, 0xa3, 0x0f, 0x09, + 0x46, 0x5f, 0x83, 0xb5, 0x77, 0x6e, 0x03, 0x6d, 0xa0, 0xe5, 0x56, 0x60, 0x9c, 0xf3, 0xbd, 0x0d, + 0xb4, 0xdc, 0x0e, 0x8c, 0x5b, 0x31, 0x11, 0xb4, 0x2c, 0xad, 0xae, 0x6d, 0xce, 0x9b, 0xec, 0xf6, + 0xe4, 0x64, 0x1d, 0x73, 0x3c, 0xc1, 0x0e, 0xa8, 0xc5, 0xb7, 0xa1, 0x58, 0xa3, 0x84, 0x4f, 0x52, + 0xb2, 0x07, 0x52, 0x20, 0x1c, 0x19, 0x89, 0x7f, 0x9c, 0x1e, 0x55, 0x1f, 0xa2, 0xe3, 0xe1, 0x71, + 0x35, 0x64, 0x81, 0xfa, 0x73, 0x7e, 0x78, 0x8e, 0xf6, 0x0f, 0x45, 0x35, 0xf2, 0x2e, 0x34, 0x5d, + 0x06, 0x27, 0x1c, 0x23, 0x96, 0xef, 0x11, 0xe7, 0x40, 0x1f, 0x16, 0xe9, 0xf7, 0x3b, 0xa2, 0x82, + 0xd8, 0x40, 0xab, 0x2e, 0xe3, 0x4b, 0x09, 0xd8, 0x0a, 0x8c, 0x4b, 0xbe, 0x97, 0x95, 0xb5, 0x03, + 0xe3, 0xa9, 0xc8, 0xc9, 0x2c, 0x20, 0xf9, 0xbb, 0x89, 0x1d, 0x26, 0x52, 0x72, 0xb1, 0x77, 0x89, + 0x0c, 0x6e, 0x9e, 0xa2, 0x07, 0xd4, 0x0b, 0x79, 0x0a, 0xe8, 0x6a, 0xd6, 0xad, 0x2c, 0xaa, 0xfd, + 0xbd, 0xc4, 0x43, 0x9b, 0xda, 0xdc, 0x86, 0x3a, 0x02, 0xce, 0x3b, 0x93, 0xe9, 0x23, 0x62, 0x15, + 0x7f, 0x5b, 0x54, 0x0f, 0x1b, 0x68, 0x29, 0x44, 0x17, 0x00, 0x84, 0x84, 0xd1, 0xe7, 0x7b, 0x19, + 0x51, 0x92, 0x2e, 0x72, 0x72, 0x39, 0x59, 0xdc, 0x9a, 0xca, 0x24, 0xf0, 0xbc, 0x85, 0xa2, 0x08, + 0x4e, 0x20, 0xe8, 0x05, 0x05, 0x43, 0x8e, 0x02, 0xba, 0x92, 0x75, 0x30, 0x03, 0x6a, 0xae, 0xda, + 0xef, 0x91, 0xf0, 0x70, 0x76, 0xa9, 0xb9, 0x87, 0x77, 0x88, 0xdf, 0xd4, 0x75, 0x31, 0x65, 0xf3, + 0x40, 0x3e, 0x02, 0xef, 0xd2, 0xd7, 0x05, 0x94, 0x90, 0xcf, 0xc9, 0x3b, 0x1e, 0xd2, 0x79, 0x03, + 0xda, 0x57, 0x14, 0x75, 0x04, 0xfb, 0xdc, 0x35, 0xfd, 0xe6, 0x96, 0x87, 0xeb, 0x24, 0xbd, 0x0c, + 0x6d, 0xeb, 0x8f, 0x8b, 0x40, 0xae, 0x42, 0xc9, 0x05, 0x2a, 0x1b, 0xa1, 0x46, 0x7c, 0x8f, 0x78, + 0x35, 0xa9, 0x4e, 0xca, 0x40, 0x39, 0x7c, 0x33, 0xf2, 0xcd, 0x70, 0x7a, 0x06, 0x95, 0x5a, 0xd3, + 0x1a, 0xea, 0x48, 0xcc, 0x81, 0xbb, 0x66, 0xd3, 0x83, 0x29, 0x16, 0x67, 0x31, 0xd3, 0x2f, 0x8b, + 0x00, 0xdc, 0x04, 0x22, 0x91, 0xca, 0xba, 0xbb, 0xea, 0x11, 0x14, 0xe1, 0xed, 0xc0, 0xb8, 0x1c, + 0x4e, 0x61, 0x09, 0x58, 0x41, 0xa5, 0x7d, 0xb4, 0x5d, 0x55, 0xdb, 0x21, 0xa4, 0x69, 0x72, 0xd2, + 0x68, 0xba, 0x1e, 0xf6, 0x6c, 0xc2, 0xcc, 0x6d, 0xfd, 0x8a, 0x70, 0xf9, 0x55, 0xd8, 0x08, 0x80, + 0xae, 0xa7, 0x20, 0xb8, 0x7b, 0x4d, 0x8c, 0x92, 0x07, 0xe4, 0x5a, 0xec, 0x45, 0xd9, 0xd5, 0x99, + 0x17, 0x51, 0xc1, 0x8a, 0x76, 0xa0, 0x0e, 0x58, 0xd8, 0xda, 0x26, 0xa6, 0xbd, 0x45, 0x5d, 0x8f, + 0xd4, 0xcd, 0x4d, 0xdb, 0x21, 0x4c, 0xbf, 0x2a, 0x5c, 0x5c, 0x82, 0x13, 0x4d, 0xc0, 0x4b, 0x21, + 0xba, 0x08, 0x60, 0x12, 0xe8, 0x02, 0x52, 0xd8, 0x83, 0xc9, 0xde, 0x42, 0x45, 0x33, 0xda, 0x37, + 0x14, 0xf5, 0x72, 0xd3, 0x73, 0xb7, 0xa0, 0x98, 0x31, 0xfd, 0x66, 0x1d, 0x73, 0x22, 0x17, 0x08, + 0x4f, 0x08, 0xdf, 0xd7, 0xe1, 0x7e, 0x1b, 0x6b, 0x6d, 0x08, 0x25, 0xb9, 0x18, 0x08, 0x8b, 0xec, + 0x0e, 0xb8, 0x44, 0xe7, 0x25, 0x29, 0x10, 0xca, 0x4b, 0xa8, 0x93, 0x45, 0xed, 0x1d, 0x45, 0x1d, + 0x76, 0xec, 0x86, 0xcd, 0xcd, 0x1a, 0xa6, 0xf5, 0x3d, 0xbb, 0xce, 0xb7, 0x4d, 0x9b, 0x9a, 0x0e, + 0xa6, 0xfa, 0xa8, 0x08, 0xc9, 0x8a, 0x28, 0x1e, 0x41, 0x63, 0x2e, 0x56, 0x58, 0xa2, 0xcb, 0x98, + 0xa6, 0x05, 0x7f, 0x11, 0xfb, 0x98, 0xb0, 0x94, 0x99, 0xd2, 0xde, 0x56, 0x54, 0xad, 0x61, 0x53, + 0x73, 0xdb, 0x6d, 0x10, 0xb3, 0x6e, 0xb3, 0x1d, 0x73, 0xd3, 0x23, 0x44, 0x37, 0xc6, 0x94, 0xf1, + 0xee, 0x99, 0x9e, 0x89, 0xf0, 0x65, 0x6d, 0x62, 0xcd, 0x7e, 0x93, 0xcc, 0xbd, 0xfc, 0x41, 0x60, + 0x74, 0xc1, 0x4e, 0x6c, 0xd8, 0xf4, 0x55, 0xb7, 0x41, 0x16, 0x6c, 0xb6, 0xb3, 0xe8, 0x11, 0x92, + 0xac, 0x8e, 0x9c, 0x5c, 0xde, 0x07, 0x63, 0xd7, 0x81, 0xc8, 0xd9, 0xe9, 0xb1, 0xeb, 0x28, 0xdf, + 0x5d, 0xbb, 0xaf, 0xa8, 0x3d, 0xf1, 0x7a, 0x17, 0xc7, 0xce, 0x98, 0x38, 0x76, 0x7e, 0x2f, 0xae, + 0x3c, 0xf1, 0xa2, 0x0d, 0x0f, 0x9f, 0x6e, 0x2f, 0x6d, 0xb6, 0x03, 0x63, 0x21, 0xae, 0x38, 0x62, + 0x59, 0xc9, 0x41, 0x14, 0xed, 0x00, 0x96, 0x3b, 0x53, 0x1a, 0x84, 0xe3, 0x89, 0xcf, 0x32, 0x97, + 0x42, 0xee, 0xce, 0x98, 0xcd, 0x36, 0x4f, 0x8f, 0xaa, 0xe3, 0x0f, 0x6b, 0x0a, 0xee, 0x47, 0x12, + 0x5f, 0x94, 0xda, 0xf1, 0x1c, 0xed, 0x75, 0xb5, 0x1f, 0x3b, 0x7b, 0x50, 0x7d, 0x85, 0xaf, 0x09, + 0x94, 0x70, 0xa6, 0x3f, 0x29, 0x1e, 0xf1, 0xa0, 0xe8, 0xed, 0x0b, 0x41, 0x51, 0x95, 0xdf, 0x21, + 0x1c, 0x16, 0xfe, 0x60, 0x98, 0x61, 0x32, 0xf2, 0x0a, 0xca, 0x2b, 0x6a, 0xff, 0x51, 0xd4, 0x71, + 0x77, 0x97, 0x78, 0x7b, 0x9e, 0xcd, 0x21, 0x71, 0x34, 0x5c, 0x4e, 0xcc, 0x3a, 0xd9, 0xb5, 0x2d, + 0x62, 0x52, 0xdc, 0x20, 0x0c, 0xd2, 0x69, 0x54, 0x08, 0xe9, 0x95, 0xf4, 0x79, 0x69, 0xe4, 0x6e, + 0xdc, 0x09, 0x89, 0x3e, 0x0b, 0x64, 0xf7, 0x0e, 0xa8, 0xb7, 0x02, 0xe3, 0x9a, 0x5b, 0x80, 0x6c, + 0x8b, 0x08, 0xf4, 0x2e, 0x9d, 0x0f, 0x4d, 0xb5, 0x03, 0xe3, 0x7f, 0x05, 0xc1, 0x87, 0xd0, 0xed, + 0xbc, 0x28, 0xa1, 0x8a, 0xeb, 0xc0, 0x03, 0x3d, 0x0c, 0x0b, 0xed, 0x0b, 0xea, 0x10, 0xa4, 0x31, + 0xd3, 0xa6, 0x75, 0xb2, 0x6f, 0xc2, 0x4a, 0xae, 0x39, 0xae, 0xb5, 0xc3, 0xf4, 0x6b, 0x62, 0x4b, + 0xc3, 0xa2, 0xd1, 0x40, 0x61, 0x09, 0xf0, 0x15, 0x9b, 0xce, 0x09, 0x34, 0x79, 0xb5, 0x2d, 0x42, + 0xa5, 0x37, 0xe5, 0xf0, 0xfe, 0x8b, 0x4a, 0x2c, 0x69, 0x7f, 0x83, 0xeb, 0x2e, 0xc5, 0xd6, 0x0e, + 0xa9, 0x9b, 0xd4, 0xe5, 0xf6, 0xa6, 0x6d, 0xe1, 0xf0, 0xfd, 0xa1, 0xce, 0xf4, 0xaa, 0x98, 0xdf, + 0x77, 0x21, 0xdc, 0xc3, 0x1b, 0xa1, 0xd2, 0x1d, 0x49, 0x67, 0x69, 0x01, 0xa2, 0x3d, 0xec, 0x97, + 0x22, 0xed, 0xc0, 0xb8, 0x12, 0xa6, 0xf6, 0x32, 0x58, 0xbc, 0x55, 0x96, 0x22, 0xed, 0xa3, 0x6a, + 0x07, 0x8b, 0x87, 0xc7, 0xd5, 0x0e, 0x2c, 0x50, 0x69, 0x8f, 0x3a, 0xd3, 0x90, 0x7a, 0x91, 0x7b, + 0x78, 0x73, 0xd3, 0xb6, 0x4c, 0xcb, 0xc1, 0x8c, 0xe9, 0xd7, 0x45, 0x58, 0x5f, 0x80, 0x7a, 0x39, + 0x02, 0xe6, 0x41, 0xde, 0x0e, 0x0c, 0x2d, 0x0c, 0xa8, 0x24, 0x4c, 0x1e, 0x6a, 0x32, 0xaa, 0xda, + 0x3d, 0x75, 0x20, 0x0a, 0xb1, 0xb9, 0xe9, 0x3a, 0x75, 0xe2, 0x99, 0x4d, 0xcc, 0xb7, 0xf5, 0xa7, + 0xc4, 0xae, 0x9f, 0x85, 0x63, 0x20, 0x82, 0x17, 0x05, 0xba, 0x8a, 0xf9, 0x76, 0x92, 0x62, 0x0a, + 0x88, 0x34, 0x5d, 0x6f, 0xc1, 0xb2, 0x52, 0xde, 0x42, 0xc5, 0xee, 0xda, 0x8e, 0x7a, 0x89, 0x11, + 0x6e, 0x3a, 0xee, 0x9e, 0xd9, 0xf4, 0x6c, 0xd7, 0xb3, 0xf9, 0x81, 0xfe, 0xb4, 0xd8, 0x0a, 0x30, + 0x5e, 0x2f, 0x23, 0x7c, 0xd9, 0xdd, 0x5b, 0x8d, 0x90, 0x64, 0xb0, 0xac, 0xb8, 0xe3, 0xc5, 0x22, + 0xd7, 0x5d, 0x7b, 0x4f, 0x51, 0x87, 0x1b, 0x78, 0x3f, 0x76, 0xce, 0x72, 0xa9, 0xe5, 0x7b, 0x1e, + 0xa1, 0xd6, 0x81, 0x3e, 0x2e, 0xa2, 0xc7, 0xc4, 0x13, 0x0b, 0xde, 0x5b, 0xc1, 0xfb, 0x21, 0xc7, + 0xf9, 0x54, 0x05, 0x0e, 0xfa, 0x46, 0x89, 0x3c, 0x39, 0xe8, 0xcb, 0xc0, 0x38, 0xd0, 0xe2, 0x4d, + 0xa4, 0xdc, 0x2e, 0x2a, 0xb5, 0xaa, 0x7d, 0xa8, 0xa8, 0x03, 0x96, 0x87, 0xd9, 0x76, 0xee, 0xe6, + 0xff, 0x8c, 0x98, 0x8c, 0xf7, 0xc5, 0xcd, 0x7f, 0x3e, 0xbe, 0xf9, 0x5b, 0xd1, 0xcd, 0x7f, 0x31, + 0x3c, 0x91, 0xa1, 0x5b, 0x7a, 0x07, 0x2f, 0x4d, 0xbe, 0x42, 0xa7, 0x78, 0x9b, 0x17, 0x62, 0x58, + 0xc1, 0xfd, 0x05, 0x23, 0x50, 0x13, 0x58, 0x51, 0x4d, 0x50, 0x7d, 0x18, 0x33, 0x50, 0x15, 0xcc, + 0x87, 0x55, 0x41, 0xce, 0x98, 0xe7, 0x68, 0x3f, 0x50, 0xd4, 0x91, 0xbc, 0x7b, 0xf1, 0x63, 0xcc, + 0xb3, 0x62, 0xfe, 0xed, 0x93, 0xc0, 0xb8, 0x30, 0x8f, 0xa4, 0xef, 0x08, 0x59, 0x2b, 0xf9, 0xef, + 0x08, 0xa5, 0x68, 0xa7, 0xa5, 0x71, 0x78, 0x5c, 0x4d, 0x6d, 0xa3, 0x72, 0xcb, 0xda, 0x97, 0x14, + 0x75, 0x98, 0x71, 0x9f, 0x9a, 0x70, 0x5f, 0xc2, 0x8e, 0xbd, 0x4b, 0xcc, 0xf0, 0x16, 0xcc, 0xf4, + 0xe7, 0x92, 0x5b, 0xe8, 0x00, 0x68, 0xbc, 0x16, 0x2b, 0xac, 0x01, 0xbe, 0x96, 0xdc, 0x8d, 0x4a, + 0xb0, 0xec, 0x15, 0x5e, 0x4a, 0x63, 0x67, 0xa7, 0x6f, 0x4d, 0xa1, 0x32, 0x6b, 0x50, 0x19, 0xe7, + 0x68, 0x40, 0x36, 0x65, 0xfa, 0xf3, 0x82, 0xc4, 0x27, 0x61, 0x5f, 0x66, 0xba, 0xad, 0xd8, 0x34, + 0xad, 0x20, 0x0a, 0x88, 0x7c, 0x33, 0xcc, 0xa4, 0xd1, 0x99, 0x29, 0x54, 0xb4, 0x03, 0x77, 0xf1, + 0x1e, 0x31, 0x7a, 0xfc, 0x79, 0xeb, 0x05, 0x91, 0x39, 0xeb, 0x27, 0x81, 0xd1, 0x8b, 0xf0, 0xde, + 0x1a, 0xf7, 0xa5, 0x0f, 0x5b, 0xdd, 0x2c, 0x6d, 0x26, 0x4f, 0x50, 0xa9, 0xec, 0x81, 0x1f, 0xdf, + 0x72, 0x16, 0x91, 0x6c, 0x4f, 0xdb, 0x55, 0xfb, 0xa0, 0xd8, 0xac, 0x61, 0x46, 0xcc, 0xf0, 0x4b, + 0xa3, 0x3e, 0x31, 0xa6, 0x8c, 0xf7, 0xce, 0xf4, 0xc6, 0x97, 0xa1, 0x75, 0x21, 0x15, 0x6f, 0x86, + 0xbd, 0xb1, 0x6a, 0x28, 0x4b, 0xd3, 0x54, 0x46, 0x5c, 0x19, 0x8b, 0x4a, 0x8f, 0x68, 0x79, 0xbc, + 0x7d, 0x5c, 0x55, 0x50, 0xae, 0xab, 0xf6, 0xcd, 0x33, 0xea, 0x35, 0xc8, 0x1a, 0x49, 0xba, 0x80, + 0xd2, 0xd5, 0x72, 0x1b, 0xb0, 0x64, 0x3d, 0x72, 0xcf, 0x27, 0x8c, 0x9b, 0x3b, 0x76, 0x4d, 0x9f, + 0x14, 0xd3, 0xf1, 0x27, 0x25, 0xfa, 0x42, 0xb9, 0x82, 0xf7, 0xe7, 0x97, 0x50, 0x88, 0xbf, 0x66, + 0xcf, 0xb5, 0x02, 0xc3, 0x68, 0xe0, 0xfd, 0x64, 0x8b, 0xf3, 0xa5, 0xc8, 0x46, 0xaa, 0x92, 0x9c, + 0x7d, 0x0f, 0xd0, 0x93, 0xca, 0xbe, 0x07, 0x9a, 0x7c, 0xb0, 0x4a, 0xf4, 0xcd, 0x33, 0x47, 0x17, + 0x3d, 0xa0, 0x5b, 0x4d, 0xfb, 0xbc, 0xda, 0xe3, 0x37, 0x69, 0x33, 0xd9, 0xb5, 0x3f, 0x59, 0x14, + 0xdb, 0xf6, 0x53, 0x27, 0x81, 0x31, 0xb4, 0x40, 0x9a, 0x1e, 0xb1, 0x30, 0x27, 0xf5, 0x8d, 0x55, + 0xba, 0x9a, 0x6e, 0x61, 0xe5, 0x85, 0xf4, 0xec, 0x6c, 0xd2, 0x66, 0x04, 0x3c, 0xef, 0x36, 0x6c, + 0x38, 0xbf, 0xf9, 0x41, 0xe5, 0xf0, 0xb8, 0x5a, 0xde, 0x59, 0x57, 0x50, 0xb7, 0xd4, 0x45, 0xfb, + 0x91, 0x12, 0x0d, 0x1f, 0xbf, 0x8c, 0xbe, 0xb7, 0x28, 0xc2, 0xff, 0x36, 0x84, 0x7f, 0x30, 0x6b, + 0x22, 0x79, 0x25, 0x15, 0xc3, 0x8f, 0x25, 0xc3, 0xcb, 0xaf, 0x9b, 0x12, 0x87, 0x34, 0xba, 0x97, + 0x3b, 0x6b, 0x1d, 0x1e, 0x57, 0x4b, 0x47, 0xd1, 0x15, 0xa4, 0xa6, 0xbd, 0xb4, 0x5f, 0x2a, 0x6a, + 0xaf, 0xa0, 0x99, 0xbe, 0x81, 0xfe, 0x34, 0x24, 0xfa, 0x55, 0x71, 0xf5, 0xc8, 0x9a, 0x90, 0xde, + 0x43, 0x05, 0xd5, 0x4a, 0x42, 0x35, 0xfb, 0x82, 0x59, 0x4a, 0xf6, 0xea, 0xc7, 0xe9, 0xc1, 0x05, + 0xa3, 0x7c, 0x2c, 0x5d, 0x41, 0x3d, 0x72, 0xcf, 0x94, 0x72, 0xfa, 0xd2, 0xf9, 0x7e, 0x67, 0xca, + 0xd2, 0xab, 0x67, 0x8e, 0x72, 0xf6, 0x9d, 0xb2, 0x33, 0xe5, 0x4e, 0x7a, 0x45, 0xca, 0xb1, 0x66, + 0x4c, 0x39, 0x79, 0xd8, 0xdc, 0x54, 0xc3, 0x2f, 0x2a, 0x49, 0x8e, 0xfa, 0xd9, 0xa2, 0x48, 0x52, + 0x9f, 0xc8, 0xf2, 0x15, 0x1f, 0x25, 0xd2, 0x64, 0x25, 0x2d, 0x46, 0x2f, 0x45, 0x24, 0xa2, 0x30, + 0x8e, 0x84, 0x30, 0x51, 0x17, 0x16, 0x4b, 0x32, 0xb3, 0x69, 0x71, 0xfd, 0xe7, 0x10, 0x22, 0x65, + 0x6e, 0xe5, 0x24, 0x30, 0xae, 0xa6, 0x23, 0xae, 0x64, 0x0b, 0xaa, 0x55, 0x8b, 0x67, 0xe3, 0xd4, + 0x28, 0xe0, 0xd9, 0xe1, 0xb5, 0xa2, 0x02, 0x24, 0xe4, 0xc1, 0x5c, 0x3a, 0x62, 0x16, 0xa6, 0x4c, + 0xff, 0x45, 0x38, 0x4b, 0xeb, 0x39, 0x0a, 0xf2, 0x36, 0x5e, 0x03, 0xc5, 0x1c, 0x85, 0x02, 0x5e, + 0x9c, 0x2a, 0xc1, 0xa4, 0xa0, 0x37, 0xf7, 0xca, 0x07, 0x1f, 0x8d, 0x76, 0x1d, 0x7f, 0x34, 0xda, + 0xf5, 0xaf, 0x93, 0xd1, 0xae, 0xaf, 0xdf, 0x1f, 0xed, 0x7a, 0xf7, 0xfe, 0xa8, 0x72, 0x7c, 0x7f, + 0xb4, 0xeb, 0xaf, 0xf7, 0x47, 0xbb, 0xde, 0x78, 0x66, 0xcb, 0xe6, 0xdb, 0x7e, 0x6d, 0xc2, 0x72, + 0x1b, 0x93, 0xc9, 0x05, 0x41, 0xfa, 0x95, 0xfe, 0x3d, 0xa4, 0x76, 0x5e, 0xfc, 0x1f, 0xe4, 0xc6, + 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0xa4, 0xc7, 0xba, 0x90, 0x7b, 0x22, 0x00, 0x00, +} + +func (m *OptionsConfiguration) ProtoSize() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.RawListenAddresses) > 0 { + for _, s := range m.RawListenAddresses { + l = len(s) + n += 1 + l + sovOptionsconfiguration(uint64(l)) + } + } + if len(m.RawGlobalAnnServers) > 0 { + for _, s := range m.RawGlobalAnnServers { + l = len(s) + n += 1 + l + sovOptionsconfiguration(uint64(l)) + } + } + if m.GlobalAnnEnabled { + n += 2 + } + if m.LocalAnnEnabled { + n += 2 + } + if m.LocalAnnPort != 0 { + n += 1 + sovOptionsconfiguration(uint64(m.LocalAnnPort)) + } + l = len(m.LocalAnnMCAddr) + if l > 0 { + n += 1 + l + sovOptionsconfiguration(uint64(l)) + } + if m.MaxSendKbps != 0 { + n += 1 + sovOptionsconfiguration(uint64(m.MaxSendKbps)) + } + if m.MaxRecvKbps != 0 { + n += 1 + sovOptionsconfiguration(uint64(m.MaxRecvKbps)) + } + if m.ReconnectIntervalS != 0 { + n += 1 + sovOptionsconfiguration(uint64(m.ReconnectIntervalS)) + } + if m.RelaysEnabled { + n += 2 + } + if m.RelayReconnectIntervalM != 0 { + n += 1 + sovOptionsconfiguration(uint64(m.RelayReconnectIntervalM)) + } + if m.StartBrowser { + n += 2 + } + if m.NATEnabled { + n += 2 + } + if m.NATLeaseM != 0 { + n += 1 + sovOptionsconfiguration(uint64(m.NATLeaseM)) + } + if m.NATRenewalM != 0 { + n += 2 + sovOptionsconfiguration(uint64(m.NATRenewalM)) + } + if m.NATTimeoutS != 0 { + n += 2 + sovOptionsconfiguration(uint64(m.NATTimeoutS)) + } + if m.URAccepted != 0 { + n += 2 + sovOptionsconfiguration(uint64(m.URAccepted)) + } + if m.URSeen != 0 { + n += 2 + sovOptionsconfiguration(uint64(m.URSeen)) + } + l = len(m.URUniqueID) + if l > 0 { + n += 2 + l + sovOptionsconfiguration(uint64(l)) + } + l = len(m.URURL) + if l > 0 { + n += 2 + l + sovOptionsconfiguration(uint64(l)) + } + if m.URPostInsecurely { + n += 3 + } + if m.URInitialDelayS != 0 { + n += 2 + sovOptionsconfiguration(uint64(m.URInitialDelayS)) + } + if m.RestartOnWakeup { + n += 3 + } + if m.AutoUpgradeIntervalH != 0 { + n += 2 + sovOptionsconfiguration(uint64(m.AutoUpgradeIntervalH)) + } + if m.UpgradeToPreReleases { + n += 3 + } + if m.KeepTemporariesH != 0 { + n += 2 + sovOptionsconfiguration(uint64(m.KeepTemporariesH)) + } + if m.CacheIgnoredFiles { + n += 3 + } + if m.ProgressUpdateIntervalS != 0 { + n += 2 + sovOptionsconfiguration(uint64(m.ProgressUpdateIntervalS)) + } + if m.LimitBandwidthInLan { + n += 3 + } + l = m.MinHomeDiskFree.ProtoSize() + n += 2 + l + sovOptionsconfiguration(uint64(l)) + l = len(m.ReleasesURL) + if l > 0 { + n += 2 + l + sovOptionsconfiguration(uint64(l)) + } + if len(m.AlwaysLocalNets) > 0 { + for _, s := range m.AlwaysLocalNets { + l = len(s) + n += 2 + l + sovOptionsconfiguration(uint64(l)) + } + } + if m.OverwriteRemoteDevNames { + n += 3 + } + if m.TempIndexMinBlocks != 0 { + n += 2 + sovOptionsconfiguration(uint64(m.TempIndexMinBlocks)) + } + if len(m.UnackedNotificationIDs) > 0 { + for _, s := range m.UnackedNotificationIDs { + l = len(s) + n += 2 + l + sovOptionsconfiguration(uint64(l)) + } + } + if m.TrafficClass != 0 { + n += 2 + sovOptionsconfiguration(uint64(m.TrafficClass)) + } + l = len(m.DefaultFolderPath) + if l > 0 { + n += 2 + l + sovOptionsconfiguration(uint64(l)) + } + if m.SetLowPriority { + n += 3 + } + if m.RawMaxFolderConcurrency != 0 { + n += 2 + sovOptionsconfiguration(uint64(m.RawMaxFolderConcurrency)) + } + l = len(m.CRURL) + if l > 0 { + n += 2 + l + sovOptionsconfiguration(uint64(l)) + } + if m.CREnabled { + n += 3 + } + if m.StunKeepaliveStartS != 0 { + n += 2 + sovOptionsconfiguration(uint64(m.StunKeepaliveStartS)) + } + if m.StunKeepaliveMinS != 0 { + n += 2 + sovOptionsconfiguration(uint64(m.StunKeepaliveMinS)) + } + if len(m.RawStunServers) > 0 { + for _, s := range m.RawStunServers { + l = len(s) + n += 2 + l + sovOptionsconfiguration(uint64(l)) + } + } + if m.DatabaseTuning != 0 { + n += 2 + sovOptionsconfiguration(uint64(m.DatabaseTuning)) + } + if m.RawMaxCIRequestKiB != 0 { + n += 2 + sovOptionsconfiguration(uint64(m.RawMaxCIRequestKiB)) + } + if m.DeprecatedUPnPEnabled { + n += 4 + } + if m.DeprecatedUPnPLeaseM != 0 { + n += 3 + sovOptionsconfiguration(uint64(m.DeprecatedUPnPLeaseM)) + } + if m.DeprecatedUPnPRenewalM != 0 { + n += 3 + sovOptionsconfiguration(uint64(m.DeprecatedUPnPRenewalM)) + } + if m.DeprecatedUPnPTimeoutS != 0 { + n += 3 + sovOptionsconfiguration(uint64(m.DeprecatedUPnPTimeoutS)) + } + if len(m.DeprecatedRelayServers) > 0 { + for _, s := range m.DeprecatedRelayServers { + l = len(s) + n += 3 + l + sovOptionsconfiguration(uint64(l)) + } + } + if m.DeprecatedMinHomeDiskFreePct != 0 { + n += 11 + } + if m.DeprecatedMaxConcurrentScans != 0 { + n += 3 + sovOptionsconfiguration(uint64(m.DeprecatedMaxConcurrentScans)) + } + return n +} + +func sovOptionsconfiguration(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozOptionsconfiguration(x uint64) (n int) { + return sovOptionsconfiguration(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} diff --git a/lib/config/pullorder.go b/lib/config/pullorder.go index 341c973b1..1e64b0fac 100644 --- a/lib/config/pullorder.go +++ b/lib/config/pullorder.go @@ -6,30 +6,19 @@ package config -type PullOrder int - -const ( - OrderRandom PullOrder = iota // default is random - OrderAlphabetic - OrderSmallestFirst - OrderLargestFirst - OrderOldestFirst - OrderNewestFirst -) - func (o PullOrder) String() string { switch o { - case OrderRandom: + case PullOrderRandom: return "random" - case OrderAlphabetic: + case PullOrderAlphabetic: return "alphabetic" - case OrderSmallestFirst: + case PullOrderSmallestFirst: return "smallestFirst" - case OrderLargestFirst: + case PullOrderLargestFirst: return "largestFirst" - case OrderOldestFirst: + case PullOrderOldestFirst: return "oldestFirst" - case OrderNewestFirst: + case PullOrderNewestFirst: return "newestFirst" default: return "unknown" @@ -43,19 +32,19 @@ func (o PullOrder) MarshalText() ([]byte, error) { func (o *PullOrder) UnmarshalText(bs []byte) error { switch string(bs) { case "random": - *o = OrderRandom + *o = PullOrderRandom case "alphabetic": - *o = OrderAlphabetic + *o = PullOrderAlphabetic case "smallestFirst": - *o = OrderSmallestFirst + *o = PullOrderSmallestFirst case "largestFirst": - *o = OrderLargestFirst + *o = PullOrderLargestFirst case "oldestFirst": - *o = OrderOldestFirst + *o = PullOrderOldestFirst case "newestFirst": - *o = OrderNewestFirst + *o = PullOrderNewestFirst default: - *o = OrderRandom + *o = PullOrderRandom } return nil } diff --git a/lib/config/pullorder.pb.go b/lib/config/pullorder.pb.go new file mode 100644 index 000000000..0a95b73e8 --- /dev/null +++ b/lib/config/pullorder.pb.go @@ -0,0 +1,87 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: lib/config/pullorder.proto + +package config + +import ( + fmt "fmt" + _ "github.com/gogo/protobuf/gogoproto" + proto "github.com/gogo/protobuf/proto" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type PullOrder int32 + +const ( + PullOrderRandom PullOrder = 0 + PullOrderAlphabetic PullOrder = 1 + PullOrderSmallestFirst PullOrder = 2 + PullOrderLargestFirst PullOrder = 3 + PullOrderOldestFirst PullOrder = 4 + PullOrderNewestFirst PullOrder = 5 +) + +var PullOrder_name = map[int32]string{ + 0: "PULL_ORDER_RANDOM", + 1: "PULL_ORDER_ALPHABETIC", + 2: "PULL_ORDER_SMALLEST_FIRST", + 3: "PULL_ORDER_LARGEST_FIRST", + 4: "PULL_ORDER_OLDEST_FIRST", + 5: "PULL_ORDER_NEWEST_FIRST", +} + +var PullOrder_value = map[string]int32{ + "PULL_ORDER_RANDOM": 0, + "PULL_ORDER_ALPHABETIC": 1, + "PULL_ORDER_SMALLEST_FIRST": 2, + "PULL_ORDER_LARGEST_FIRST": 3, + "PULL_ORDER_OLDEST_FIRST": 4, + "PULL_ORDER_NEWEST_FIRST": 5, +} + +func (PullOrder) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_2fa3f5222a7755bf, []int{0} +} + +func init() { + proto.RegisterEnum("config.PullOrder", PullOrder_name, PullOrder_value) +} + +func init() { proto.RegisterFile("lib/config/pullorder.proto", fileDescriptor_2fa3f5222a7755bf) } + +var fileDescriptor_2fa3f5222a7755bf = []byte{ + // 343 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0xca, 0xc9, 0x4c, 0xd2, + 0x4f, 0xce, 0xcf, 0x4b, 0xcb, 0x4c, 0xd7, 0x2f, 0x28, 0xcd, 0xc9, 0xc9, 0x2f, 0x4a, 0x49, 0x2d, + 0xd2, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x83, 0x88, 0x4b, 0x29, 0x17, 0xa5, 0x16, 0xe4, + 0x17, 0xeb, 0x83, 0x05, 0x93, 0x4a, 0xd3, 0xf4, 0xd3, 0xf3, 0xd3, 0xf3, 0xc1, 0x1c, 0x30, 0x0b, + 0xa2, 0x58, 0xeb, 0x32, 0x13, 0x17, 0x67, 0x40, 0x69, 0x4e, 0x8e, 0x3f, 0xc8, 0x00, 0x21, 0x2d, + 0x2e, 0xc1, 0x80, 0x50, 0x1f, 0x9f, 0x78, 0xff, 0x20, 0x17, 0xd7, 0xa0, 0xf8, 0x20, 0x47, 0x3f, + 0x17, 0x7f, 0x5f, 0x01, 0x06, 0x29, 0xe1, 0xae, 0xb9, 0x0a, 0xfc, 0x70, 0x55, 0x41, 0x89, 0x79, + 0x29, 0xf9, 0xb9, 0x42, 0x46, 0x5c, 0xa2, 0x48, 0x6a, 0x1d, 0x7d, 0x02, 0x3c, 0x1c, 0x9d, 0x5c, + 0x43, 0x3c, 0x9d, 0x05, 0x18, 0xa5, 0xc4, 0xbb, 0xe6, 0x2a, 0x08, 0xc3, 0xd5, 0x3b, 0xe6, 0x14, + 0x64, 0x24, 0x26, 0xa5, 0x96, 0x64, 0x26, 0x0b, 0x59, 0x72, 0x49, 0x22, 0xe9, 0x09, 0xf6, 0x75, + 0xf4, 0xf1, 0x71, 0x0d, 0x0e, 0x89, 0x77, 0xf3, 0x0c, 0x0a, 0x0e, 0x11, 0x60, 0x92, 0x92, 0xea, + 0x9a, 0xab, 0x20, 0x06, 0xd7, 0x17, 0x9c, 0x9b, 0x98, 0x93, 0x93, 0x5a, 0x5c, 0xe2, 0x96, 0x59, + 0x54, 0x5c, 0x22, 0x64, 0xce, 0x25, 0x81, 0xa4, 0xd5, 0xc7, 0x31, 0xc8, 0x1d, 0xa1, 0x93, 0x59, + 0x4a, 0xb2, 0x6b, 0xae, 0x82, 0x28, 0x5c, 0xa7, 0x4f, 0x62, 0x51, 0x3a, 0x5c, 0xa3, 0x29, 0x97, + 0x38, 0x92, 0x46, 0x7f, 0x1f, 0x17, 0x84, 0x3e, 0x16, 0x29, 0x89, 0xae, 0xb9, 0x0a, 0x22, 0x70, + 0x7d, 0xfe, 0x39, 0x29, 0x38, 0xb4, 0xf9, 0xb9, 0x86, 0x23, 0xb4, 0xb1, 0xa2, 0x69, 0xf3, 0x4b, + 0x2d, 0x87, 0x69, 0x93, 0x62, 0x59, 0xb1, 0x44, 0x8e, 0xc1, 0xc9, 0xfd, 0xc4, 0x43, 0x39, 0x86, + 0x0b, 0x0f, 0xe5, 0x18, 0x5e, 0x3c, 0x92, 0x63, 0x98, 0xf0, 0x58, 0x8e, 0x61, 0xc1, 0x63, 0x39, + 0xc6, 0x0b, 0x8f, 0xe5, 0x18, 0x6e, 0x3c, 0x96, 0x63, 0x88, 0xd2, 0x4c, 0xcf, 0x2c, 0xc9, 0x28, + 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x2f, 0xae, 0xcc, 0x4b, 0x2e, 0xc9, 0xc8, 0xcc, 0x4b, 0x47, + 0x62, 0x21, 0xe2, 0x36, 0x89, 0x0d, 0x1c, 0x4b, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x34, + 0x1f, 0xbc, 0x31, 0xf0, 0x01, 0x00, 0x00, +} diff --git a/lib/config/size.go b/lib/config/size.go index 0388941c5..fb6518245 100644 --- a/lib/config/size.go +++ b/lib/config/size.go @@ -14,11 +14,6 @@ import ( "github.com/syncthing/syncthing/lib/fs" ) -type Size struct { - Value float64 `json:"value" xml:",chardata"` - Unit string `json:"unit" xml:"unit,attr"` -} - func ParseSize(s string) (Size, error) { s = strings.TrimSpace(s) if len(s) == 0 { diff --git a/lib/config/size.pb.go b/lib/config/size.pb.go new file mode 100644 index 000000000..6956197ce --- /dev/null +++ b/lib/config/size.pb.go @@ -0,0 +1,101 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: lib/config/size.proto + +package config + +import ( + fmt "fmt" + _ "github.com/gogo/protobuf/gogoproto" + proto "github.com/gogo/protobuf/proto" + _ "github.com/syncthing/syncthing/proto/ext" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type Size struct { + Value float64 `protobuf:"fixed64,1,opt,name=value,proto3" json:"value" xml:",chardata"` + Unit string `protobuf:"bytes,2,opt,name=unit,proto3" json:"unit" xml:"unit,attr"` +} + +func (m *Size) Reset() { *m = Size{} } +func (*Size) ProtoMessage() {} +func (*Size) Descriptor() ([]byte, []int) { + return fileDescriptor_4d75cb8f619bd299, []int{0} +} +func (m *Size) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Size.Unmarshal(m, b) +} +func (m *Size) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Size.Marshal(b, m, deterministic) +} +func (m *Size) XXX_Merge(src proto.Message) { + xxx_messageInfo_Size.Merge(m, src) +} +func (m *Size) XXX_Size() int { + return xxx_messageInfo_Size.Size(m) +} +func (m *Size) XXX_DiscardUnknown() { + xxx_messageInfo_Size.DiscardUnknown(m) +} + +var xxx_messageInfo_Size proto.InternalMessageInfo + +func init() { + proto.RegisterType((*Size)(nil), "config.Size") +} + +func init() { proto.RegisterFile("lib/config/size.proto", fileDescriptor_4d75cb8f619bd299) } + +var fileDescriptor_4d75cb8f619bd299 = []byte{ + // 246 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0xcd, 0xc9, 0x4c, 0xd2, + 0x4f, 0xce, 0xcf, 0x4b, 0xcb, 0x4c, 0xd7, 0x2f, 0xce, 0xac, 0x4a, 0xd5, 0x2b, 0x28, 0xca, 0x2f, + 0xc9, 0x17, 0x62, 0x83, 0x08, 0x49, 0x29, 0x17, 0xa5, 0x16, 0xe4, 0x17, 0xeb, 0x83, 0x05, 0x93, + 0x4a, 0xd3, 0xf4, 0xd3, 0xf3, 0xd3, 0xf3, 0xc1, 0x1c, 0x30, 0x0b, 0xa2, 0x58, 0x8a, 0x33, 0xb5, + 0xa2, 0x04, 0xc2, 0x54, 0xea, 0x66, 0xe4, 0x62, 0x09, 0xce, 0xac, 0x4a, 0x15, 0xb2, 0xe7, 0x62, + 0x2d, 0x4b, 0xcc, 0x29, 0x4d, 0x95, 0x60, 0x54, 0x60, 0xd4, 0x60, 0x74, 0xd2, 0x7c, 0x75, 0x4f, + 0x1e, 0x22, 0xf0, 0xe9, 0x9e, 0x3c, 0x7f, 0x45, 0x6e, 0x8e, 0x95, 0x92, 0x4e, 0x72, 0x46, 0x62, + 0x51, 0x4a, 0x62, 0x49, 0xa2, 0xd2, 0xab, 0xf3, 0x2a, 0x9c, 0x70, 0x5e, 0x10, 0x44, 0x99, 0x90, + 0x0d, 0x17, 0x4b, 0x69, 0x5e, 0x66, 0x89, 0x04, 0x93, 0x02, 0xa3, 0x06, 0xa7, 0x93, 0xc6, 0xab, + 0x7b, 0xf2, 0x60, 0x3e, 0x5c, 0x3b, 0x88, 0xa3, 0x93, 0x58, 0x52, 0x52, 0x04, 0xd6, 0x0e, 0xe7, + 0x05, 0x81, 0x55, 0x59, 0xb1, 0xcc, 0x58, 0x20, 0xcf, 0xe0, 0xe4, 0x7e, 0xe2, 0xa1, 0x1c, 0xc3, + 0x85, 0x87, 0x72, 0x0c, 0x2f, 0x1e, 0xc9, 0x31, 0x4c, 0x78, 0x2c, 0xc7, 0xb0, 0xe0, 0xb1, 0x1c, + 0xe3, 0x85, 0xc7, 0x72, 0x0c, 0x37, 0x1e, 0xcb, 0x31, 0x44, 0x69, 0xa6, 0x67, 0x96, 0x64, 0x94, + 0x26, 0xe9, 0x25, 0xe7, 0xe7, 0xea, 0x17, 0x57, 0xe6, 0x25, 0x97, 0x64, 0x64, 0xe6, 0xa5, 0x23, + 0xb1, 0x10, 0x21, 0x93, 0xc4, 0x06, 0xf6, 0x9d, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0x67, 0x60, + 0xd6, 0x9a, 0x2e, 0x01, 0x00, 0x00, +} + +func (m *Size) ProtoSize() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Value != 0 { + n += 9 + } + l = len(m.Unit) + if l > 0 { + n += 1 + l + sovSize(uint64(l)) + } + return n +} + +func sovSize(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozSize(x uint64) (n int) { + return sovSize(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} diff --git a/lib/config/tuning.go b/lib/config/tuning.go index 8bff678ce..50296d7fe 100644 --- a/lib/config/tuning.go +++ b/lib/config/tuning.go @@ -6,15 +6,6 @@ package config -type Tuning int - -const ( - // N.b. these constants must match those in lib/db.Tuning! - TuningAuto Tuning = iota // default is auto - TuningSmall - TuningLarge -) - func (t Tuning) String() string { switch t { case TuningAuto: diff --git a/lib/config/tuning.pb.go b/lib/config/tuning.pb.go new file mode 100644 index 000000000..c6610d409 --- /dev/null +++ b/lib/config/tuning.pb.go @@ -0,0 +1,70 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: lib/config/tuning.proto + +package config + +import ( + fmt "fmt" + _ "github.com/gogo/protobuf/gogoproto" + proto "github.com/gogo/protobuf/proto" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type Tuning int32 + +const ( + TuningAuto Tuning = 0 + TuningSmall Tuning = 1 + TuningLarge Tuning = 2 +) + +var Tuning_name = map[int32]string{ + 0: "TUNING_AUTO", + 1: "TUNING_SMALL", + 2: "TUNING_LARGE", +} + +var Tuning_value = map[string]int32{ + "TUNING_AUTO": 0, + "TUNING_SMALL": 1, + "TUNING_LARGE": 2, +} + +func (Tuning) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_204cfa1615fdfefd, []int{0} +} + +func init() { + proto.RegisterEnum("config.Tuning", Tuning_name, Tuning_value) +} + +func init() { proto.RegisterFile("lib/config/tuning.proto", fileDescriptor_204cfa1615fdfefd) } + +var fileDescriptor_204cfa1615fdfefd = []byte{ + // 224 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0xcf, 0xc9, 0x4c, 0xd2, + 0x4f, 0xce, 0xcf, 0x4b, 0xcb, 0x4c, 0xd7, 0x2f, 0x29, 0xcd, 0xcb, 0xcc, 0x4b, 0xd7, 0x2b, 0x28, + 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x83, 0x08, 0x4a, 0x29, 0x17, 0xa5, 0x16, 0xe4, 0x17, 0xeb, 0x83, + 0x05, 0x93, 0x4a, 0xd3, 0xf4, 0xd3, 0xf3, 0xd3, 0xf3, 0xc1, 0x1c, 0x30, 0x0b, 0xa2, 0x58, 0xab, + 0x94, 0x8b, 0x2d, 0x04, 0xac, 0x59, 0x48, 0x9e, 0x8b, 0x3b, 0x24, 0xd4, 0xcf, 0xd3, 0xcf, 0x3d, + 0xde, 0x31, 0x34, 0xc4, 0x5f, 0x80, 0x41, 0x8a, 0xaf, 0x6b, 0xae, 0x02, 0x17, 0x44, 0xd2, 0xb1, + 0xb4, 0x24, 0x5f, 0x48, 0x91, 0x8b, 0x07, 0xaa, 0x20, 0xd8, 0xd7, 0xd1, 0xc7, 0x47, 0x80, 0x51, + 0x8a, 0xbf, 0x6b, 0xae, 0x02, 0x37, 0x44, 0x45, 0x70, 0x6e, 0x62, 0x4e, 0x0e, 0x92, 0x12, 0x1f, + 0xc7, 0x20, 0x77, 0x57, 0x01, 0x26, 0x64, 0x25, 0x3e, 0x89, 0x45, 0xe9, 0xa9, 0x52, 0x2c, 0x2b, + 0x96, 0xc8, 0x31, 0x38, 0xb9, 0x9f, 0x78, 0x28, 0xc7, 0x70, 0xe1, 0xa1, 0x1c, 0xc3, 0x8b, 0x47, + 0x72, 0x0c, 0x13, 0x1e, 0xcb, 0x31, 0x2c, 0x78, 0x2c, 0xc7, 0x78, 0xe1, 0xb1, 0x1c, 0xc3, 0x8d, + 0xc7, 0x72, 0x0c, 0x51, 0x9a, 0xe9, 0x99, 0x25, 0x19, 0xa5, 0x49, 0x7a, 0xc9, 0xf9, 0xb9, 0xfa, + 0xc5, 0x95, 0x79, 0xc9, 0x25, 0x19, 0x99, 0x79, 0xe9, 0x48, 0x2c, 0x84, 0xcf, 0x93, 0xd8, 0xc0, + 0xde, 0x30, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0xfe, 0xdf, 0xc4, 0xd9, 0x0e, 0x01, 0x00, 0x00, +} diff --git a/lib/config/versioningconfiguration.go b/lib/config/versioningconfiguration.go index a399fa3d0..9b14c55ef 100644 --- a/lib/config/versioningconfiguration.go +++ b/lib/config/versioningconfiguration.go @@ -14,13 +14,6 @@ import ( "github.com/syncthing/syncthing/lib/util" ) -// VersioningConfiguration is used in the code and for JSON serialization -type VersioningConfiguration struct { - Type string `json:"type"` - Params map[string]string `json:"params"` - CleanupIntervalS int `json:"cleanupIntervalS" default:"3600"` -} - // internalVersioningConfiguration is used in XML serialization type internalVersioningConfiguration struct { Type string `xml:"type,attr,omitempty"` diff --git a/lib/config/versioningconfiguration.pb.go b/lib/config/versioningconfiguration.pb.go new file mode 100644 index 000000000..48ba6533a --- /dev/null +++ b/lib/config/versioningconfiguration.pb.go @@ -0,0 +1,122 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: lib/config/versioningconfiguration.proto + +package config + +import ( + fmt "fmt" + proto "github.com/gogo/protobuf/proto" + _ "github.com/syncthing/syncthing/proto/ext" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// VersioningConfiguration is used in the code and for JSON serialization +type VersioningConfiguration struct { + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type" ` + Params map[string]string `protobuf:"bytes,2,rep,name=parameters,proto3" json:"params" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + CleanupIntervalS int `protobuf:"varint,3,opt,name=cleanup_interval_s,json=cleanupIntervalS,proto3,casttype=int" json:"cleanupIntervalS" default:"3600"` +} + +func (m *VersioningConfiguration) Reset() { *m = VersioningConfiguration{} } +func (m *VersioningConfiguration) String() string { return proto.CompactTextString(m) } +func (*VersioningConfiguration) ProtoMessage() {} +func (*VersioningConfiguration) Descriptor() ([]byte, []int) { + return fileDescriptor_95ba6bdb22ffea81, []int{0} +} +func (m *VersioningConfiguration) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_VersioningConfiguration.Unmarshal(m, b) +} +func (m *VersioningConfiguration) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_VersioningConfiguration.Marshal(b, m, deterministic) +} +func (m *VersioningConfiguration) XXX_Merge(src proto.Message) { + xxx_messageInfo_VersioningConfiguration.Merge(m, src) +} +func (m *VersioningConfiguration) XXX_Size() int { + return xxx_messageInfo_VersioningConfiguration.Size(m) +} +func (m *VersioningConfiguration) XXX_DiscardUnknown() { + xxx_messageInfo_VersioningConfiguration.DiscardUnknown(m) +} + +var xxx_messageInfo_VersioningConfiguration proto.InternalMessageInfo + +func init() { + proto.RegisterType((*VersioningConfiguration)(nil), "config.VersioningConfiguration") + proto.RegisterMapType((map[string]string)(nil), "config.VersioningConfiguration.ParametersEntry") +} + +func init() { + proto.RegisterFile("lib/config/versioningconfiguration.proto", fileDescriptor_95ba6bdb22ffea81) +} + +var fileDescriptor_95ba6bdb22ffea81 = []byte{ + // 383 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x52, 0xcf, 0x8b, 0x9b, 0x40, + 0x18, 0x1d, 0x63, 0x22, 0x64, 0xd2, 0x5f, 0x78, 0xa9, 0x04, 0xea, 0x48, 0xea, 0xc1, 0x5e, 0x34, + 0x34, 0xb4, 0x94, 0x1c, 0x2d, 0xa5, 0xf4, 0x56, 0x52, 0x28, 0xb4, 0x97, 0x60, 0xec, 0xc4, 0x0c, + 0x35, 0xa3, 0xe8, 0x18, 0xea, 0xb1, 0x87, 0x42, 0x8f, 0xed, 0xfe, 0x05, 0xfb, 0xe7, 0xe4, 0x96, + 0x1c, 0xf7, 0x34, 0x90, 0x78, 0x59, 0x3c, 0xe6, 0x98, 0xd3, 0xe2, 0x28, 0xd9, 0xb0, 0xcb, 0xde, + 0xde, 0x7b, 0xdf, 0x7b, 0xdf, 0x93, 0xcf, 0x81, 0x56, 0x48, 0x66, 0x8e, 0x1f, 0xd1, 0x39, 0x09, + 0x9c, 0x15, 0x4e, 0x52, 0x12, 0x51, 0x42, 0x83, 0x5a, 0xc8, 0x12, 0x8f, 0x91, 0x88, 0xda, 0x71, + 0x12, 0xb1, 0x48, 0x55, 0x6a, 0xb1, 0xdf, 0xc5, 0xbf, 0x58, 0x2d, 0x0d, 0xfe, 0xc8, 0xf0, 0xf9, + 0xd7, 0x53, 0xe8, 0xfd, 0x79, 0x48, 0x35, 0x60, 0x9b, 0xe5, 0x31, 0xd6, 0x24, 0x43, 0xb2, 0xba, + 0xee, 0xa3, 0x92, 0x23, 0xc1, 0x0f, 0x1c, 0x81, 0x89, 0x40, 0xea, 0x6f, 0x09, 0xc2, 0xd8, 0x4b, + 0xbc, 0x25, 0x66, 0x38, 0x49, 0xb5, 0x96, 0x21, 0x5b, 0xbd, 0xd7, 0x8e, 0x5d, 0xd7, 0xd8, 0x0f, + 0xec, 0xb5, 0x3f, 0x9f, 0x12, 0x1f, 0x28, 0x4b, 0x72, 0x77, 0xb8, 0xe6, 0x08, 0xec, 0x39, 0x52, + 0xc4, 0x20, 0x2d, 0x39, 0x52, 0xc4, 0xd2, 0xb4, 0x6a, 0x3a, 0x6c, 0xcc, 0x86, 0x5d, 0x6c, 0xcd, + 0xc6, 0x31, 0x39, 0x2b, 0x55, 0x7d, 0xa8, 0xfa, 0x21, 0xf6, 0x68, 0x16, 0x4f, 0x09, 0x65, 0x38, + 0x59, 0x79, 0xe1, 0x34, 0xd5, 0x64, 0x43, 0xb2, 0x3a, 0xee, 0x9b, 0x92, 0xa3, 0x67, 0xcd, 0xf4, + 0x53, 0x33, 0xfc, 0x72, 0xe0, 0xe8, 0xc9, 0x0f, 0x3c, 0xf7, 0xb2, 0x90, 0x8d, 0x07, 0xa3, 0xb7, + 0xc3, 0xe1, 0xe0, 0xc8, 0x91, 0x4c, 0x28, 0x3b, 0x6e, 0xcc, 0x76, 0xc5, 0x27, 0xf7, 0x22, 0xfd, + 0x6f, 0xf0, 0xe9, 0x9d, 0xaf, 0x56, 0x5f, 0x40, 0xf9, 0x27, 0xce, 0x9b, 0xe3, 0xf4, 0x4a, 0x8e, + 0x2a, 0x2a, 0x6e, 0x53, 0x01, 0xf5, 0x25, 0xec, 0xac, 0xbc, 0x30, 0xc3, 0x5a, 0x4b, 0x18, 0x1e, + 0x97, 0x1c, 0xd5, 0x82, 0xb0, 0xd4, 0x70, 0xdc, 0x7a, 0x27, 0x8d, 0xdb, 0x7f, 0xff, 0x9b, 0xc0, + 0xfd, 0xb8, 0xde, 0xe9, 0x60, 0xbb, 0xd3, 0xc1, 0xf5, 0x5e, 0x07, 0xff, 0x0a, 0x1d, 0x5c, 0x16, + 0xba, 0xb4, 0x2d, 0x74, 0x70, 0x55, 0xe8, 0xe0, 0xfb, 0xab, 0x80, 0xb0, 0x45, 0x36, 0xb3, 0xfd, + 0x68, 0xe9, 0xa4, 0x39, 0xf5, 0xd9, 0x82, 0xd0, 0xe0, 0x0c, 0xdd, 0xbe, 0x80, 0x99, 0x22, 0xfe, + 0xeb, 0xe8, 0x26, 0x00, 0x00, 0xff, 0xff, 0x08, 0x18, 0x19, 0x5e, 0x16, 0x02, 0x00, 0x00, +} + +func (m *VersioningConfiguration) ProtoSize() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Type) + if l > 0 { + n += 1 + l + sovVersioningconfiguration(uint64(l)) + } + if len(m.Params) > 0 { + for k, v := range m.Params { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovVersioningconfiguration(uint64(len(k))) + 1 + len(v) + sovVersioningconfiguration(uint64(len(v))) + n += mapEntrySize + 1 + sovVersioningconfiguration(uint64(mapEntrySize)) + } + } + if m.CleanupIntervalS != 0 { + n += 1 + sovVersioningconfiguration(uint64(m.CleanupIntervalS)) + } + return n +} + +func sovVersioningconfiguration(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozVersioningconfiguration(x uint64) (n int) { + return sovVersioningconfiguration(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} diff --git a/lib/config/wrapper.go b/lib/config/wrapper.go index e95ce33c2..375d774b9 100644 --- a/lib/config/wrapper.go +++ b/lib/config/wrapper.go @@ -54,7 +54,6 @@ func (noopWaiter) Wait() {} // A Wrapper around a Configuration that manages loads, saves and published // notifications of changes to registered Handlers type Wrapper interface { - MyName() string ConfigPath() string RawCopy() Configuration @@ -117,19 +116,19 @@ func Wrap(path string, cfg Configuration, evLogger events.Logger) Wrapper { // Load loads an existing file on disk and returns a new configuration // wrapper. -func Load(path string, myID protocol.DeviceID, evLogger events.Logger) (Wrapper, error) { +func Load(path string, myID protocol.DeviceID, evLogger events.Logger) (Wrapper, int, error) { fd, err := os.Open(path) if err != nil { - return nil, err + return nil, 0, err } defer fd.Close() - cfg, err := ReadXML(fd, myID) + cfg, originalVersion, err := ReadXML(fd, myID) if err != nil { - return nil, err + return nil, 0, err } - return Wrap(path, cfg, evLogger), nil + return Wrap(path, cfg, evLogger), originalVersion, nil } func (w *wrapper) ConfigPath() string { @@ -447,14 +446,6 @@ func (w *wrapper) setRequiresRestart() { atomic.StoreUint32(&w.requiresRestart, 1) } -func (w *wrapper) MyName() string { - w.mut.Lock() - myID := w.cfg.MyID - w.mut.Unlock() - cfg, _ := w.Device(myID) - return cfg.Name -} - func (w *wrapper) AddOrUpdatePendingDevice(device protocol.DeviceID, name, address string) { w.mut.Lock() defer w.mut.Unlock() diff --git a/lib/connections/limiter.go b/lib/connections/limiter.go index e4528d97a..eac63d70e 100644 --- a/lib/connections/limiter.go +++ b/lib/connections/limiter.go @@ -21,6 +21,7 @@ import ( // limiter manages a read and write rate limit, reacting to config changes // as appropriate. type limiter struct { + myID protocol.DeviceID mu sync.Mutex write *rate.Limiter read *rate.Limiter @@ -40,8 +41,9 @@ const ( maxSingleWriteSize = 8 << 10 ) -func newLimiter(cfg config.Wrapper) *limiter { +func newLimiter(myId protocol.DeviceID, cfg config.Wrapper) *limiter { l := &limiter{ + myID: myId, write: rate.NewLimiter(rate.Inf, limiterBurstSize), read: rate.NewLimiter(rate.Inf, limiterBurstSize), mu: sync.NewMutex(), @@ -89,7 +91,7 @@ func (lim *limiter) processDevicesConfigurationLocked(from, to config.Configurat // Mark devices which should not be removed, create new limiters if needed and assign new limiter rate for _, dev := range to.Devices { - if dev.DeviceID == to.MyID { + if dev.DeviceID == lim.myID { // This limiter was created for local device. Should skip this device continue } diff --git a/lib/connections/limiter_test.go b/lib/connections/limiter_test.go index 784452109..43baf27a1 100644 --- a/lib/connections/limiter_test.go +++ b/lib/connections/limiter_test.go @@ -46,7 +46,7 @@ func initConfig() config.Wrapper { func TestLimiterInit(t *testing.T) { cfg := initConfig() - lim := newLimiter(cfg) + lim := newLimiter(device1, cfg) device2ReadLimit := dev2Conf.MaxRecvKbps device2WriteLimit := dev2Conf.MaxSendKbps @@ -71,7 +71,7 @@ func TestLimiterInit(t *testing.T) { func TestSetDeviceLimits(t *testing.T) { cfg := initConfig() - lim := newLimiter(cfg) + lim := newLimiter(device1, cfg) // should still be inf/inf because this is local device dev1ReadLimit := rand.Int() % 100000 @@ -109,7 +109,7 @@ func TestSetDeviceLimits(t *testing.T) { func TestRemoveDevice(t *testing.T) { cfg := initConfig() - lim := newLimiter(cfg) + lim := newLimiter(device1, cfg) waiter, _ := cfg.RemoveDevice(device3) waiter.Wait() @@ -129,7 +129,7 @@ func TestRemoveDevice(t *testing.T) { func TestAddDevice(t *testing.T) { cfg := initConfig() - lim := newLimiter(cfg) + lim := newLimiter(device1, cfg) addedDevice, _ := protocol.DeviceIDFromString("XZJ4UNS-ENI7QGJ-J45DT6G-QSGML2K-6I4XVOG-NAZ7BF5-2VAOWNT-TFDOMQU") addDevConf := config.NewDeviceConfiguration(addedDevice, "addedDevice") @@ -160,7 +160,7 @@ func TestAddDevice(t *testing.T) { func TestAddAndRemove(t *testing.T) { cfg := initConfig() - lim := newLimiter(cfg) + lim := newLimiter(device1, cfg) addedDevice, _ := protocol.DeviceIDFromString("XZJ4UNS-ENI7QGJ-J45DT6G-QSGML2K-6I4XVOG-NAZ7BF5-2VAOWNT-TFDOMQU") addDevConf := config.NewDeviceConfiguration(addedDevice, "addedDevice") diff --git a/lib/connections/service.go b/lib/connections/service.go index 1bf9864ed..40235aa13 100644 --- a/lib/connections/service.go +++ b/lib/connections/service.go @@ -149,7 +149,7 @@ func NewService(cfg config.Wrapper, myID protocol.DeviceID, mdl Model, tlsCfg *t conns: make(chan internalConn), bepProtocolName: bepProtocolName, tlsDefaultCommonName: tlsDefaultCommonName, - limiter: newLimiter(cfg), + limiter: newLimiter(myID, cfg), natService: nat.NewService(myID, cfg), evLogger: evLogger, diff --git a/lib/db/structs.go b/lib/db/structs.go index a744b1e64..6af6821cc 100644 --- a/lib/db/structs.go +++ b/lib/db/structs.go @@ -4,8 +4,8 @@ // License, v. 2.0. If a copy of the MPL was not distributed with this file, // You can obtain one at https://mozilla.org/MPL/2.0/. -//go:generate go run ../../script/protofmt.go structs.proto -//go:generate protoc -I ../../ -I . --gogofast_out=Mlib/protocol/bep.proto=github.com/syncthing/syncthing/lib/protocol:. structs.proto +//go:generate go run ../../proto/scripts/protofmt.go structs.proto +//go:generate protoc -I ../../ -I ../../proto -I . --gogofast_out=Mlib/protocol/bep.proto=github.com/syncthing/syncthing/lib/protocol:. structs.proto package db diff --git a/lib/discover/local.go b/lib/discover/local.go index c5391574d..3ff55a416 100644 --- a/lib/discover/local.go +++ b/lib/discover/local.go @@ -4,7 +4,7 @@ // License, v. 2.0. If a copy of the MPL was not distributed with this file, // You can obtain one at https://mozilla.org/MPL/2.0/. -//go:generate go run ../../script/protofmt.go local.proto +//go:generate go run ../../proto/scripts/protofmt.go local.proto //go:generate protoc -I ../../ -I . --gogofast_out=. local.proto package discover diff --git a/lib/fs/filesystem_copy_range_method.go b/lib/fs/copyrangemethod.go similarity index 85% rename from lib/fs/filesystem_copy_range_method.go rename to lib/fs/copyrangemethod.go index 6811fa270..25b0c3914 100644 --- a/lib/fs/filesystem_copy_range_method.go +++ b/lib/fs/copyrangemethod.go @@ -6,17 +6,6 @@ package fs -type CopyRangeMethod int - -const ( - CopyRangeMethodStandard CopyRangeMethod = iota - CopyRangeMethodIoctl - CopyRangeMethodCopyFileRange - CopyRangeMethodSendFile - CopyRangeMethodDuplicateExtents - CopyRangeMethodAllWithFallback -) - func (o CopyRangeMethod) String() string { switch o { case CopyRangeMethodStandard: diff --git a/lib/fs/copyrangemethod.pb.go b/lib/fs/copyrangemethod.pb.go new file mode 100644 index 000000000..1f72abbd9 --- /dev/null +++ b/lib/fs/copyrangemethod.pb.go @@ -0,0 +1,87 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: lib/fs/copyrangemethod.proto + +package fs + +import ( + fmt "fmt" + proto "github.com/gogo/protobuf/proto" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type CopyRangeMethod int32 + +const ( + CopyRangeMethodStandard CopyRangeMethod = 0 + CopyRangeMethodIoctl CopyRangeMethod = 1 + CopyRangeMethodCopyFileRange CopyRangeMethod = 2 + CopyRangeMethodSendFile CopyRangeMethod = 3 + CopyRangeMethodDuplicateExtents CopyRangeMethod = 4 + CopyRangeMethodAllWithFallback CopyRangeMethod = 5 +) + +var CopyRangeMethod_name = map[int32]string{ + 0: "COPY_RANGE_METHOD_STANDARD", + 1: "COPY_RANGE_METHOD_IOCTL", + 2: "COPY_RANGE_METHOD_COPY_FILE_RANGE", + 3: "COPY_RANGE_METHOD_SEND_FILE", + 4: "COPY_RANGE_METHOD_DUPLICATE_EXTENTS", + 5: "COPY_RANGE_METHOD_ALL_WITH_FALLBACK", +} + +var CopyRangeMethod_value = map[string]int32{ + "COPY_RANGE_METHOD_STANDARD": 0, + "COPY_RANGE_METHOD_IOCTL": 1, + "COPY_RANGE_METHOD_COPY_FILE_RANGE": 2, + "COPY_RANGE_METHOD_SEND_FILE": 3, + "COPY_RANGE_METHOD_DUPLICATE_EXTENTS": 4, + "COPY_RANGE_METHOD_ALL_WITH_FALLBACK": 5, +} + +func (CopyRangeMethod) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_78e1061c3022e87e, []int{0} +} + +func init() { + proto.RegisterEnum("fs.CopyRangeMethod", CopyRangeMethod_name, CopyRangeMethod_value) +} + +func init() { proto.RegisterFile("lib/fs/copyrangemethod.proto", fileDescriptor_78e1061c3022e87e) } + +var fileDescriptor_78e1061c3022e87e = []byte{ + // 357 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x92, 0xbf, 0x4e, 0xc2, 0x40, + 0x00, 0xc6, 0x0b, 0xa8, 0x43, 0x17, 0x9b, 0xc6, 0x04, 0x53, 0xc8, 0x59, 0x25, 0x2e, 0x0e, 0x30, + 0x18, 0x27, 0x5d, 0x8e, 0xf6, 0x0a, 0x0d, 0x47, 0x21, 0x50, 0x83, 0xba, 0x34, 0xfd, 0x07, 0x6d, + 0x3c, 0xda, 0x86, 0x1e, 0x89, 0xbc, 0x42, 0x27, 0x5f, 0xa0, 0x89, 0x9b, 0xaf, 0xe2, 0xc8, 0xe8, + 0x8a, 0x5d, 0x7c, 0x0c, 0x43, 0x59, 0x4c, 0x61, 0xbb, 0xfb, 0xbe, 0xfc, 0x7e, 0xf9, 0x92, 0x3b, + 0xb6, 0x4e, 0x7c, 0xab, 0x35, 0x8d, 0x5b, 0x76, 0x18, 0xad, 0x16, 0x66, 0x30, 0x73, 0xe7, 0x2e, + 0xf5, 0x42, 0xa7, 0x19, 0x2d, 0x42, 0x1a, 0xf2, 0xe5, 0x69, 0x7c, 0xf3, 0x59, 0x61, 0x4f, 0xa5, + 0x30, 0x5a, 0x8d, 0xb6, 0x6d, 0x3f, 0x6f, 0xf9, 0x7b, 0x56, 0x90, 0x06, 0xc3, 0x67, 0x63, 0x04, + 0xb5, 0x0e, 0x32, 0xfa, 0x48, 0xef, 0x0e, 0x64, 0x63, 0xac, 0x43, 0x4d, 0x86, 0x23, 0x99, 0x63, + 0x84, 0x5a, 0x92, 0x8a, 0xd5, 0x02, 0x34, 0xa6, 0x66, 0xe0, 0x98, 0x0b, 0x87, 0xbf, 0x63, 0xab, + 0xfb, 0xb0, 0x3a, 0x90, 0x74, 0xcc, 0x95, 0x84, 0xf3, 0x24, 0x15, 0xcf, 0x0a, 0xa4, 0x1a, 0xda, + 0x94, 0xf0, 0x1d, 0xf6, 0x72, 0x1f, 0xcb, 0x13, 0x45, 0xc5, 0x68, 0x17, 0x73, 0x65, 0x41, 0x4c, + 0x52, 0xb1, 0x5e, 0x10, 0x6c, 0xaf, 0x8a, 0x4f, 0xdc, 0x3c, 0xe2, 0x1f, 0xd8, 0xda, 0x81, 0xf1, + 0x48, 0x93, 0x73, 0x11, 0x57, 0x39, 0xbc, 0xde, 0x0d, 0x9c, 0xad, 0x82, 0xc7, 0x6c, 0x63, 0x9f, + 0x96, 0x1f, 0x87, 0x58, 0x95, 0xa0, 0x8e, 0x0c, 0xf4, 0xa4, 0x23, 0x4d, 0x1f, 0x73, 0x47, 0x42, + 0x23, 0x49, 0xc5, 0x8b, 0x82, 0x45, 0x5e, 0x46, 0xc4, 0xb7, 0x4d, 0xea, 0xa2, 0x37, 0xea, 0x06, + 0x34, 0xe6, 0x7b, 0x87, 0x6c, 0x10, 0x63, 0x63, 0xa2, 0xea, 0x5d, 0x43, 0x81, 0x18, 0xb7, 0xa1, + 0xd4, 0xe3, 0x8e, 0x85, 0xab, 0x24, 0x15, 0x41, 0xc1, 0x06, 0x09, 0x99, 0xf8, 0xd4, 0x53, 0x4c, + 0x42, 0x2c, 0xd3, 0x7e, 0x6d, 0x4b, 0x5f, 0x1b, 0xc0, 0xac, 0x37, 0x80, 0xf9, 0xfd, 0x01, 0xcc, + 0x7b, 0x06, 0x98, 0x8f, 0x0c, 0x94, 0xd6, 0x19, 0x60, 0xbe, 0x33, 0xc0, 0xbc, 0x5c, 0xcf, 0x7c, + 0xea, 0x2d, 0xad, 0xa6, 0x1d, 0xce, 0x5b, 0xf1, 0x2a, 0xb0, 0xa9, 0xe7, 0x07, 0xb3, 0x7f, 0xa7, + 0xdd, 0x47, 0xb0, 0x4e, 0xf2, 0x97, 0xbf, 0xfd, 0x0b, 0x00, 0x00, 0xff, 0xff, 0x06, 0xa6, 0xad, + 0xd0, 0x19, 0x02, 0x00, 0x00, +} diff --git a/lib/fs/types.go b/lib/fs/types.go index 385839805..658adb918 100644 --- a/lib/fs/types.go +++ b/lib/fs/types.go @@ -6,13 +6,6 @@ package fs -type FilesystemType int - -const ( - FilesystemTypeBasic FilesystemType = iota // default is basic - FilesystemTypeFake -) - func (t FilesystemType) String() string { switch t { case FilesystemTypeBasic: diff --git a/lib/fs/types.pb.go b/lib/fs/types.pb.go new file mode 100644 index 000000000..6e668e67f --- /dev/null +++ b/lib/fs/types.pb.go @@ -0,0 +1,65 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: lib/fs/types.proto + +package fs + +import ( + fmt "fmt" + proto "github.com/gogo/protobuf/proto" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type FilesystemType int32 + +const ( + FilesystemTypeBasic FilesystemType = 0 + FilesystemTypeFake FilesystemType = 1 +) + +var FilesystemType_name = map[int32]string{ + 0: "FILESYSTEM_TYPE_BASIC", + 1: "FILESYSTEM_TYPE_FAKE", +} + +var FilesystemType_value = map[string]int32{ + "FILESYSTEM_TYPE_BASIC": 0, + "FILESYSTEM_TYPE_FAKE": 1, +} + +func (FilesystemType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_b556f45c4309ad5d, []int{0} +} + +func init() { + proto.RegisterEnum("fs.FilesystemType", FilesystemType_name, FilesystemType_value) +} + +func init() { proto.RegisterFile("lib/fs/types.proto", fileDescriptor_b556f45c4309ad5d) } + +var fileDescriptor_b556f45c4309ad5d = []byte{ + // 194 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0xca, 0xc9, 0x4c, 0xd2, + 0x4f, 0x2b, 0xd6, 0x2f, 0xa9, 0x2c, 0x48, 0x2d, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, + 0x4a, 0x2b, 0xd6, 0x2a, 0xe3, 0xe2, 0x73, 0xcb, 0xcc, 0x49, 0x2d, 0xae, 0x2c, 0x2e, 0x49, 0xcd, + 0x0d, 0xa9, 0x2c, 0x48, 0x15, 0x32, 0xe2, 0x12, 0x75, 0xf3, 0xf4, 0x71, 0x0d, 0x8e, 0x0c, 0x0e, + 0x71, 0xf5, 0x8d, 0x0f, 0x89, 0x0c, 0x70, 0x8d, 0x77, 0x72, 0x0c, 0xf6, 0x74, 0x16, 0x60, 0x90, + 0x12, 0xef, 0x9a, 0xab, 0x20, 0x8c, 0xaa, 0xdc, 0x29, 0xb1, 0x38, 0x33, 0x59, 0xc8, 0x80, 0x4b, + 0x04, 0x5d, 0x8f, 0x9b, 0xa3, 0xb7, 0xab, 0x00, 0xa3, 0x94, 0x58, 0xd7, 0x5c, 0x05, 0x21, 0x54, + 0x2d, 0x6e, 0x89, 0xd9, 0xa9, 0x4e, 0xce, 0x27, 0x1e, 0xca, 0x31, 0x5c, 0x78, 0x28, 0xc7, 0xf0, + 0xe2, 0x91, 0x1c, 0xc3, 0x84, 0xc7, 0x72, 0x0c, 0x0b, 0x1e, 0xcb, 0x31, 0x5e, 0x78, 0x2c, 0xc7, + 0x70, 0xe3, 0xb1, 0x1c, 0x43, 0x94, 0x6a, 0x7a, 0x66, 0x49, 0x46, 0x69, 0x92, 0x5e, 0x72, 0x7e, + 0xae, 0x7e, 0x71, 0x65, 0x5e, 0x72, 0x49, 0x46, 0x66, 0x5e, 0x3a, 0x12, 0x0b, 0xe2, 0x99, 0x24, + 0x36, 0xb0, 0x3f, 0x8c, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0x86, 0xe8, 0x6b, 0xac, 0xdd, 0x00, + 0x00, 0x00, +} diff --git a/lib/model/folder.go b/lib/model/folder.go index 43576a982..0e9664fda 100644 --- a/lib/model/folder.go +++ b/lib/model/folder.go @@ -44,11 +44,12 @@ type folder struct { localFlags uint32 - model *model - shortID protocol.ShortID - fset *db.FileSet - ignores *ignore.Matcher - ctx context.Context + model *model + shortID protocol.ShortID + fset *db.FileSet + ignores *ignore.Matcher + modTimeWindow time.Duration + ctx context.Context scanInterval time.Duration scanTimer *time.Timer @@ -95,10 +96,11 @@ func newFolder(model *model, fset *db.FileSet, ignores *ignore.Matcher, cfg conf FolderStatisticsReference: stats.NewFolderStatisticsReference(model.db, cfg.ID), ioLimiter: ioLimiter, - model: model, - shortID: model.shortID, - fset: fset, - ignores: ignores, + model: model, + shortID: model.shortID, + fset: fset, + ignores: ignores, + modTimeWindow: cfg.ModTimeWindow(), scanInterval: time.Duration(cfg.RescanIntervalS) * time.Second, scanTimer: time.NewTimer(0), // The first scan should be done immediately. @@ -457,7 +459,7 @@ func (f *folder) scanSubdirs(subDirs []string) error { ShortID: f.shortID, ProgressTickIntervalS: f.ScanProgressIntervalS, LocalFlags: f.localFlags, - ModTimeWindow: f.ModTimeWindow(), + ModTimeWindow: f.modTimeWindow, EventLogger: f.evLogger, }) @@ -480,7 +482,7 @@ func (f *folder) scanSubdirs(subDirs []string) error { batchAppend = func(fi protocol.FileInfo, snap *db.Snapshot) { switch gf, ok := snap.GetGlobal(fi.Name); { case !ok: - case gf.IsEquivalentOptional(fi, f.ModTimeWindow(), false, false, protocol.FlagLocalReceiveOnly): + case gf.IsEquivalentOptional(fi, f.modTimeWindow, false, false, protocol.FlagLocalReceiveOnly): // What we have locally is equivalent to the global file. fi.Version = fi.Version.Merge(gf.Version) fallthrough diff --git a/lib/model/folder_sendonly.go b/lib/model/folder_sendonly.go index a5dcc96a4..1e6606d62 100644 --- a/lib/model/folder_sendonly.go +++ b/lib/model/folder_sendonly.go @@ -77,7 +77,7 @@ func (f *sendOnlyFolder) pull() bool { } file := intf.(protocol.FileInfo) - if !file.IsEquivalentOptional(curFile, f.ModTimeWindow(), f.IgnorePerms, false, 0) { + if !file.IsEquivalentOptional(curFile, f.modTimeWindow, f.IgnorePerms, false, 0) { return true } diff --git a/lib/model/folder_sendrecv.go b/lib/model/folder_sendrecv.go index 89e4a1918..af1611a21 100644 --- a/lib/model/folder_sendrecv.go +++ b/lib/model/folder_sendrecv.go @@ -420,17 +420,17 @@ func (f *sendReceiveFolder) processNeeded(snap *db.Snapshot, dbUpdateChan chan<- // Now do the file queue. Reorder it according to configuration. switch f.Order { - case config.OrderRandom: + case config.PullOrderRandom: f.queue.Shuffle() - case config.OrderAlphabetic: + case config.PullOrderAlphabetic: // The queue is already in alphabetic order. - case config.OrderSmallestFirst: + case config.PullOrderSmallestFirst: f.queue.SortSmallestFirst() - case config.OrderLargestFirst: + case config.PullOrderLargestFirst: f.queue.SortLargestFirst() - case config.OrderOldestFirst: + case config.PullOrderOldestFirst: f.queue.SortOldestFirst() - case config.OrderNewestFirst: + case config.PullOrderNewestFirst: f.queue.SortNewestFirst() } @@ -651,7 +651,7 @@ func (f *sendReceiveFolder) handleDir(file protocol.FileInfo, snap *db.Snapshot, // don't handle modification times on directories, because that sucks...) // It's OK to change mode bits on stuff within non-writable directories. if !f.IgnorePerms && !file.NoPermissions { - if err := f.fs.Chmod(file.Name, mode|(fs.FileMode(info.Mode())&retainBits)); err != nil { + if err := f.fs.Chmod(file.Name, mode|(info.Mode()&retainBits)); err != nil { f.newPullError(file.Name, err) return } @@ -962,7 +962,7 @@ func (f *sendReceiveFolder) renameFile(cur, source, target protocol.FileInfo, sn default: var fi protocol.FileInfo if fi, err = scanner.CreateFileInfo(stat, target.Name, f.fs); err == nil { - if !fi.IsEquivalentOptional(curTarget, f.ModTimeWindow(), f.IgnorePerms, true, protocol.LocalAllFlags) { + if !fi.IsEquivalentOptional(curTarget, f.modTimeWindow, f.IgnorePerms, true, protocol.LocalAllFlags) { // Target changed scanChan <- target.Name err = errModified @@ -1874,7 +1874,7 @@ func (f *sendReceiveFolder) deleteDirOnDisk(dir string, snap *db.Snapshot, scanC hasToBeScanned = true continue } - if !cf.IsEquivalentOptional(diskFile, f.ModTimeWindow(), f.IgnorePerms, true, protocol.LocalAllFlags) { + if !cf.IsEquivalentOptional(diskFile, f.modTimeWindow, f.IgnorePerms, true, protocol.LocalAllFlags) { // File on disk changed compared to what we have in db // -> schedule scan. scanChan <- fullDirFile @@ -1946,7 +1946,7 @@ func (f *sendReceiveFolder) scanIfItemChanged(name string, stat fs.FileInfo, ite return errors.Wrap(err, "comparing item on disk to db") } - if !statItem.IsEquivalentOptional(item, f.ModTimeWindow(), f.IgnorePerms, true, protocol.LocalAllFlags) { + if !statItem.IsEquivalentOptional(item, f.modTimeWindow, f.IgnorePerms, true, protocol.LocalAllFlags) { return errModified } diff --git a/lib/model/model.go b/lib/model/model.go index c1a839671..b2e3ddfd8 100644 --- a/lib/model/model.go +++ b/lib/model/model.go @@ -1781,7 +1781,10 @@ func (m *model) OnHello(remoteID protocol.DeviceID, addr net.Addr, hello protoco func (m *model) GetHello(id protocol.DeviceID) protocol.HelloIntf { name := "" if _, ok := m.cfg.Device(id); ok { - name = m.cfg.MyName() + // Set our name (from the config of our device ID) only if we already know about the other side device ID. + if myCfg, ok := m.cfg.Device(m.id); ok { + name = myCfg.Name + } } return &protocol.Hello{ DeviceName: name, diff --git a/lib/model/model_test.go b/lib/model/model_test.go index bedc65aba..659208cc5 100644 --- a/lib/model/model_test.go +++ b/lib/model/model_test.go @@ -340,7 +340,7 @@ func TestDeviceRename(t *testing.T) { t.Errorf("Device name got overwritten") } - cfgw, err := config.Load("testdata/tmpconfig.xml", myID, events.NoopLogger) + cfgw, _, err := config.Load("testdata/tmpconfig.xml", myID, events.NoopLogger) if err != nil { t.Error(err) return diff --git a/lib/protocol/bep.pb.go b/lib/protocol/bep.pb.go index a459cfbbe..099ab0f9f 100644 --- a/lib/protocol/bep.pb.go +++ b/lib/protocol/bep.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: bep.proto +// source: lib/protocol/bep.proto package protocol @@ -63,7 +63,7 @@ func (x MessageType) String() string { } func (MessageType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_e3f59eb60afbbc6e, []int{0} + return fileDescriptor_311ef540e10d9705, []int{0} } type MessageCompression int32 @@ -88,7 +88,7 @@ func (x MessageCompression) String() string { } func (MessageCompression) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_e3f59eb60afbbc6e, []int{1} + return fileDescriptor_311ef540e10d9705, []int{1} } type Compression int32 @@ -116,7 +116,7 @@ func (x Compression) String() string { } func (Compression) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_e3f59eb60afbbc6e, []int{2} + return fileDescriptor_311ef540e10d9705, []int{2} } type FileInfoType int32 @@ -150,7 +150,7 @@ func (x FileInfoType) String() string { } func (FileInfoType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_e3f59eb60afbbc6e, []int{3} + return fileDescriptor_311ef540e10d9705, []int{3} } type ErrorCode int32 @@ -181,7 +181,7 @@ func (x ErrorCode) String() string { } func (ErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_e3f59eb60afbbc6e, []int{4} + return fileDescriptor_311ef540e10d9705, []int{4} } type FileDownloadProgressUpdateType int32 @@ -206,7 +206,7 @@ func (x FileDownloadProgressUpdateType) String() string { } func (FileDownloadProgressUpdateType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_e3f59eb60afbbc6e, []int{5} + return fileDescriptor_311ef540e10d9705, []int{5} } type Hello struct { @@ -219,7 +219,7 @@ func (m *Hello) Reset() { *m = Hello{} } func (m *Hello) String() string { return proto.CompactTextString(m) } func (*Hello) ProtoMessage() {} func (*Hello) Descriptor() ([]byte, []int) { - return fileDescriptor_e3f59eb60afbbc6e, []int{0} + return fileDescriptor_311ef540e10d9705, []int{0} } func (m *Hello) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -257,7 +257,7 @@ func (m *Header) Reset() { *m = Header{} } func (m *Header) String() string { return proto.CompactTextString(m) } func (*Header) ProtoMessage() {} func (*Header) Descriptor() ([]byte, []int) { - return fileDescriptor_e3f59eb60afbbc6e, []int{1} + return fileDescriptor_311ef540e10d9705, []int{1} } func (m *Header) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -294,7 +294,7 @@ func (m *ClusterConfig) Reset() { *m = ClusterConfig{} } func (m *ClusterConfig) String() string { return proto.CompactTextString(m) } func (*ClusterConfig) ProtoMessage() {} func (*ClusterConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_e3f59eb60afbbc6e, []int{2} + return fileDescriptor_311ef540e10d9705, []int{2} } func (m *ClusterConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -338,7 +338,7 @@ func (m *Folder) Reset() { *m = Folder{} } func (m *Folder) String() string { return proto.CompactTextString(m) } func (*Folder) ProtoMessage() {} func (*Folder) Descriptor() ([]byte, []int) { - return fileDescriptor_e3f59eb60afbbc6e, []int{3} + return fileDescriptor_311ef540e10d9705, []int{3} } func (m *Folder) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -383,7 +383,7 @@ func (m *Device) Reset() { *m = Device{} } func (m *Device) String() string { return proto.CompactTextString(m) } func (*Device) ProtoMessage() {} func (*Device) Descriptor() ([]byte, []int) { - return fileDescriptor_e3f59eb60afbbc6e, []int{4} + return fileDescriptor_311ef540e10d9705, []int{4} } func (m *Device) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -421,7 +421,7 @@ func (m *Index) Reset() { *m = Index{} } func (m *Index) String() string { return proto.CompactTextString(m) } func (*Index) ProtoMessage() {} func (*Index) Descriptor() ([]byte, []int) { - return fileDescriptor_e3f59eb60afbbc6e, []int{5} + return fileDescriptor_311ef540e10d9705, []int{5} } func (m *Index) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -459,7 +459,7 @@ func (m *IndexUpdate) Reset() { *m = IndexUpdate{} } func (m *IndexUpdate) String() string { return proto.CompactTextString(m) } func (*IndexUpdate) ProtoMessage() {} func (*IndexUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_e3f59eb60afbbc6e, []int{6} + return fileDescriptor_311ef540e10d9705, []int{6} } func (m *IndexUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -518,7 +518,7 @@ type FileInfo struct { func (m *FileInfo) Reset() { *m = FileInfo{} } func (*FileInfo) ProtoMessage() {} func (*FileInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_e3f59eb60afbbc6e, []int{7} + return fileDescriptor_311ef540e10d9705, []int{7} } func (m *FileInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -557,7 +557,7 @@ type BlockInfo struct { func (m *BlockInfo) Reset() { *m = BlockInfo{} } func (*BlockInfo) ProtoMessage() {} func (*BlockInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_e3f59eb60afbbc6e, []int{8} + return fileDescriptor_311ef540e10d9705, []int{8} } func (m *BlockInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -594,7 +594,7 @@ func (m *Vector) Reset() { *m = Vector{} } func (m *Vector) String() string { return proto.CompactTextString(m) } func (*Vector) ProtoMessage() {} func (*Vector) Descriptor() ([]byte, []int) { - return fileDescriptor_e3f59eb60afbbc6e, []int{9} + return fileDescriptor_311ef540e10d9705, []int{9} } func (m *Vector) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -632,7 +632,7 @@ func (m *Counter) Reset() { *m = Counter{} } func (m *Counter) String() string { return proto.CompactTextString(m) } func (*Counter) ProtoMessage() {} func (*Counter) Descriptor() ([]byte, []int) { - return fileDescriptor_e3f59eb60afbbc6e, []int{10} + return fileDescriptor_311ef540e10d9705, []int{10} } func (m *Counter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -676,7 +676,7 @@ func (m *Request) Reset() { *m = Request{} } func (m *Request) String() string { return proto.CompactTextString(m) } func (*Request) ProtoMessage() {} func (*Request) Descriptor() ([]byte, []int) { - return fileDescriptor_e3f59eb60afbbc6e, []int{11} + return fileDescriptor_311ef540e10d9705, []int{11} } func (m *Request) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -715,7 +715,7 @@ func (m *Response) Reset() { *m = Response{} } func (m *Response) String() string { return proto.CompactTextString(m) } func (*Response) ProtoMessage() {} func (*Response) Descriptor() ([]byte, []int) { - return fileDescriptor_e3f59eb60afbbc6e, []int{12} + return fileDescriptor_311ef540e10d9705, []int{12} } func (m *Response) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -753,7 +753,7 @@ func (m *DownloadProgress) Reset() { *m = DownloadProgress{} } func (m *DownloadProgress) String() string { return proto.CompactTextString(m) } func (*DownloadProgress) ProtoMessage() {} func (*DownloadProgress) Descriptor() ([]byte, []int) { - return fileDescriptor_e3f59eb60afbbc6e, []int{13} + return fileDescriptor_311ef540e10d9705, []int{13} } func (m *DownloadProgress) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -794,7 +794,7 @@ func (m *FileDownloadProgressUpdate) Reset() { *m = FileDownloadProgress func (m *FileDownloadProgressUpdate) String() string { return proto.CompactTextString(m) } func (*FileDownloadProgressUpdate) ProtoMessage() {} func (*FileDownloadProgressUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_e3f59eb60afbbc6e, []int{14} + return fileDescriptor_311ef540e10d9705, []int{14} } func (m *FileDownloadProgressUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -830,7 +830,7 @@ func (m *Ping) Reset() { *m = Ping{} } func (m *Ping) String() string { return proto.CompactTextString(m) } func (*Ping) ProtoMessage() {} func (*Ping) Descriptor() ([]byte, []int) { - return fileDescriptor_e3f59eb60afbbc6e, []int{15} + return fileDescriptor_311ef540e10d9705, []int{15} } func (m *Ping) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -867,7 +867,7 @@ func (m *Close) Reset() { *m = Close{} } func (m *Close) String() string { return proto.CompactTextString(m) } func (*Close) ProtoMessage() {} func (*Close) Descriptor() ([]byte, []int) { - return fileDescriptor_e3f59eb60afbbc6e, []int{16} + return fileDescriptor_311ef540e10d9705, []int{16} } func (m *Close) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -922,126 +922,126 @@ func init() { proto.RegisterType((*Close)(nil), "protocol.Close") } -func init() { proto.RegisterFile("bep.proto", fileDescriptor_e3f59eb60afbbc6e) } +func init() { proto.RegisterFile("lib/protocol/bep.proto", fileDescriptor_311ef540e10d9705) } -var fileDescriptor_e3f59eb60afbbc6e = []byte{ - // 1842 bytes of a gzipped FileDescriptorProto +var fileDescriptor_311ef540e10d9705 = []byte{ + // 1846 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x56, 0xcf, 0x73, 0xdb, 0xc6, 0xf5, 0x27, 0x48, 0xf0, 0xd7, 0x23, 0xa5, 0x40, 0x6b, 0x5b, 0x5f, 0x7c, 0x61, 0x9b, 0x84, 0x69, 0x3b, 0x66, 0x34, 0xa9, 0xed, 0x26, 0x69, 0x3b, 0xed, 0xb4, 0x9d, 0xe1, 0x0f, 0x48, 0xe6, 0x54, - 0x26, 0xd5, 0x25, 0xe5, 0xd4, 0x39, 0x14, 0x03, 0x11, 0x4b, 0x0a, 0x63, 0x10, 0xcb, 0x02, 0xa0, + 0x26, 0xd5, 0x25, 0xe5, 0xd4, 0x39, 0x14, 0x03, 0x12, 0x4b, 0x09, 0x63, 0x10, 0xcb, 0x02, 0xa0, 0x64, 0xe6, 0x4f, 0xe0, 0xa9, 0xc7, 0x5e, 0x38, 0x93, 0x99, 0x9c, 0xfa, 0x9f, 0xf8, 0xe8, 0xf6, 0xd4, 0xe9, 0x41, 0xd3, 0xc8, 0x97, 0xf4, 0xd6, 0x4b, 0xaf, 0x9d, 0xce, 0xee, 0x02, 0x24, 0x28, - 0xc5, 0x99, 0x1c, 0x7a, 0xc2, 0xee, 0x7b, 0x9f, 0x7d, 0xbb, 0xef, 0xb3, 0xef, 0x7d, 0x16, 0x50, - 0x3c, 0x21, 0xd3, 0xc7, 0x53, 0x9f, 0x86, 0x14, 0x15, 0xf8, 0x67, 0x48, 0x5d, 0xed, 0xbe, 0x4f, - 0xa6, 0x34, 0x78, 0xc2, 0xe7, 0x27, 0xb3, 0xd1, 0x93, 0x31, 0x1d, 0x53, 0x3e, 0xe1, 0x23, 0x01, - 0xaf, 0x4d, 0x21, 0xfb, 0x8c, 0xb8, 0x2e, 0x45, 0x55, 0x28, 0xd9, 0xe4, 0xcc, 0x19, 0x12, 0xd3, - 0xb3, 0x26, 0x44, 0x95, 0x74, 0xa9, 0x5e, 0xc4, 0x20, 0x4c, 0x5d, 0x6b, 0x42, 0x18, 0x60, 0xe8, - 0x3a, 0xc4, 0x0b, 0x05, 0x20, 0x2d, 0x00, 0xc2, 0xc4, 0x01, 0x0f, 0x61, 0x3b, 0x02, 0x9c, 0x11, - 0x3f, 0x70, 0xa8, 0xa7, 0x66, 0x38, 0x66, 0x4b, 0x58, 0x5f, 0x08, 0x63, 0x2d, 0x80, 0xdc, 0x33, - 0x62, 0xd9, 0xc4, 0x47, 0x1f, 0x81, 0x1c, 0xce, 0xa7, 0x62, 0xaf, 0xed, 0x4f, 0x6e, 0x3d, 0x8e, - 0x4f, 0xfe, 0xf8, 0x39, 0x09, 0x02, 0x6b, 0x4c, 0x06, 0xf3, 0x29, 0xc1, 0x1c, 0x82, 0x7e, 0x0d, - 0xa5, 0x21, 0x9d, 0x4c, 0x7d, 0x12, 0xf0, 0xc0, 0x69, 0xbe, 0xe2, 0xce, 0xb5, 0x15, 0xad, 0x35, - 0x06, 0x27, 0x17, 0xd4, 0x1a, 0xb0, 0xd5, 0x72, 0x67, 0x41, 0x48, 0xfc, 0x16, 0xf5, 0x46, 0xce, - 0x18, 0x3d, 0x85, 0xfc, 0x88, 0xba, 0x36, 0xf1, 0x03, 0x55, 0xd2, 0x33, 0xf5, 0xd2, 0x27, 0xca, - 0x3a, 0xd8, 0x3e, 0x77, 0x34, 0xe5, 0x37, 0x17, 0xd5, 0x14, 0x8e, 0x61, 0xb5, 0xaf, 0xd3, 0x90, - 0x13, 0x1e, 0xb4, 0x0b, 0x69, 0xc7, 0x16, 0x14, 0x35, 0x73, 0x97, 0x17, 0xd5, 0x74, 0xa7, 0x8d, - 0xd3, 0x8e, 0x8d, 0x6e, 0x42, 0xd6, 0xb5, 0x4e, 0x88, 0x1b, 0x91, 0x23, 0x26, 0xe8, 0x36, 0x14, - 0x7d, 0x62, 0xd9, 0x26, 0xf5, 0xdc, 0x39, 0xa7, 0xa4, 0x80, 0x0b, 0xcc, 0xd0, 0xf3, 0xdc, 0x39, - 0xfa, 0x11, 0x20, 0x67, 0xec, 0x51, 0x9f, 0x98, 0x53, 0xe2, 0x4f, 0x1c, 0x7e, 0xda, 0x40, 0x95, - 0x39, 0x6a, 0x47, 0x78, 0x8e, 0xd6, 0x0e, 0x74, 0x1f, 0xb6, 0x22, 0xb8, 0x4d, 0x5c, 0x12, 0x12, - 0x35, 0xcb, 0x91, 0x65, 0x61, 0x6c, 0x73, 0x1b, 0x7a, 0x0a, 0x37, 0x6d, 0x27, 0xb0, 0x4e, 0x5c, - 0x62, 0x86, 0x64, 0x32, 0x35, 0x1d, 0xcf, 0x26, 0xaf, 0x49, 0xa0, 0xe6, 0x38, 0x16, 0x45, 0xbe, - 0x01, 0x99, 0x4c, 0x3b, 0xc2, 0x83, 0x76, 0x21, 0x37, 0xb5, 0x66, 0x01, 0xb1, 0xd5, 0x3c, 0xc7, - 0x44, 0x33, 0xc6, 0x92, 0xa8, 0x80, 0x40, 0x55, 0xae, 0xb2, 0xd4, 0xe6, 0x8e, 0x98, 0xa5, 0x08, - 0x56, 0xfb, 0x57, 0x1a, 0x72, 0xc2, 0x83, 0x3e, 0x5c, 0xb1, 0x54, 0x6e, 0xee, 0x32, 0xd4, 0xdf, - 0x2f, 0xaa, 0x05, 0xe1, 0xeb, 0xb4, 0x13, 0xac, 0x21, 0x90, 0x13, 0x15, 0xc5, 0xc7, 0xe8, 0x0e, - 0x14, 0x2d, 0xdb, 0x66, 0xb7, 0x47, 0x02, 0x35, 0xa3, 0x67, 0xea, 0x45, 0xbc, 0x36, 0xa0, 0x9f, - 0x6d, 0x56, 0x83, 0x7c, 0xb5, 0x7e, 0xde, 0x57, 0x06, 0xec, 0x2a, 0x86, 0xc4, 0x8f, 0x2a, 0x38, - 0xcb, 0xf7, 0x2b, 0x30, 0x03, 0xaf, 0xdf, 0x7b, 0x50, 0x9e, 0x58, 0xaf, 0xcd, 0x80, 0xfc, 0x61, - 0x46, 0xbc, 0x21, 0xe1, 0x74, 0x65, 0x70, 0x69, 0x62, 0xbd, 0xee, 0x47, 0x26, 0x54, 0x01, 0x70, - 0xbc, 0xd0, 0xa7, 0xf6, 0x6c, 0x48, 0xfc, 0x88, 0xab, 0x84, 0x05, 0xfd, 0x04, 0x0a, 0x9c, 0x6c, - 0xd3, 0xb1, 0xd5, 0x82, 0x2e, 0xd5, 0xe5, 0xa6, 0x16, 0x25, 0x9e, 0xe7, 0x54, 0xf3, 0xbc, 0xe3, - 0x21, 0xce, 0x73, 0x6c, 0xc7, 0x46, 0xbf, 0x04, 0x2d, 0x78, 0xe5, 0xb0, 0x8b, 0x12, 0x91, 0x42, - 0x87, 0x7a, 0xa6, 0x4f, 0x26, 0xf4, 0xcc, 0x72, 0x03, 0xb5, 0xc8, 0xb7, 0x51, 0x19, 0xa2, 0x93, - 0x00, 0xe0, 0xc8, 0x5f, 0xeb, 0x41, 0x96, 0x47, 0x64, 0xb7, 0x28, 0x8a, 0x35, 0xea, 0xde, 0x68, - 0x86, 0x1e, 0x43, 0x76, 0xe4, 0xb8, 0x24, 0x50, 0xd3, 0xfc, 0x0e, 0x51, 0xa2, 0xd2, 0x1d, 0x97, - 0x74, 0xbc, 0x11, 0x8d, 0x6e, 0x51, 0xc0, 0x6a, 0xc7, 0x50, 0xe2, 0x01, 0x8f, 0xa7, 0xb6, 0x15, - 0x92, 0xff, 0x59, 0xd8, 0xaf, 0xb3, 0x50, 0x88, 0x3d, 0xab, 0x4b, 0x97, 0x12, 0x97, 0x8e, 0x40, - 0x0e, 0x9c, 0x2f, 0x09, 0xef, 0x91, 0x0c, 0xe6, 0x63, 0x74, 0x17, 0x60, 0x42, 0x6d, 0x67, 0xe4, - 0x10, 0xdb, 0x0c, 0xf8, 0x95, 0x65, 0x70, 0x31, 0xb6, 0xf4, 0xd1, 0x53, 0x28, 0xad, 0xdc, 0x27, - 0x73, 0xb5, 0xcc, 0x39, 0xff, 0x20, 0xe6, 0xbc, 0x7f, 0x4a, 0xfd, 0xb0, 0xd3, 0xc6, 0xab, 0x10, - 0xcd, 0x39, 0x2b, 0xe9, 0x58, 0x9e, 0x18, 0xb1, 0x1b, 0x25, 0xfd, 0x82, 0x0c, 0x43, 0xba, 0x6a, - 0xfc, 0x08, 0x86, 0x34, 0x28, 0xac, 0x6a, 0x02, 0xf8, 0x01, 0x56, 0x73, 0xf4, 0x63, 0xc8, 0x9d, - 0xb8, 0x74, 0xf8, 0x2a, 0xee, 0x8f, 0x1b, 0xeb, 0x60, 0x4d, 0x66, 0x4f, 0xb0, 0x10, 0x01, 0x99, - 0x4c, 0x06, 0xf3, 0x89, 0xeb, 0x78, 0xaf, 0xcc, 0xd0, 0xf2, 0xc7, 0x24, 0x54, 0x77, 0x84, 0x4c, - 0x46, 0xd6, 0x01, 0x37, 0x32, 0xb9, 0x15, 0x0b, 0xcc, 0x53, 0x2b, 0x38, 0x55, 0x11, 0x6b, 0x23, - 0x0c, 0xc2, 0xf4, 0xcc, 0x0a, 0x4e, 0xd1, 0x5e, 0xa4, 0x9e, 0x42, 0x0b, 0x77, 0xaf, 0xb3, 0x9f, - 0x90, 0x4f, 0x1d, 0x4a, 0x57, 0xe5, 0x65, 0x0b, 0x27, 0x4d, 0x6c, 0xbb, 0x15, 0x91, 0x5e, 0xa0, - 0x96, 0x74, 0xa9, 0x9e, 0x5d, 0xf3, 0xd6, 0x0d, 0xd0, 0x13, 0x10, 0x9b, 0x9b, 0xfc, 0x8a, 0xb6, - 0x98, 0xbf, 0xa9, 0x5c, 0x5e, 0x54, 0xcb, 0xd8, 0x3a, 0xe7, 0xa9, 0xf6, 0x9d, 0x2f, 0x09, 0x2e, - 0x9e, 0xc4, 0x43, 0xb6, 0xa7, 0x4b, 0x87, 0x96, 0x6b, 0x8e, 0x5c, 0x6b, 0x1c, 0xa8, 0xdf, 0xe6, - 0xf9, 0xa6, 0xc0, 0x6d, 0xfb, 0xcc, 0x84, 0x6a, 0x50, 0x8e, 0x38, 0x16, 0x39, 0xfe, 0x33, 0xcf, - 0x93, 0x2c, 0x45, 0x46, 0x9e, 0xa5, 0xca, 0x14, 0x88, 0xa9, 0x9a, 0x1d, 0xc9, 0x57, 0x3c, 0x45, - 0x75, 0xc8, 0x3b, 0xde, 0x99, 0xe5, 0x3a, 0x91, 0x68, 0x35, 0xb7, 0x2f, 0x2f, 0xaa, 0x80, 0xad, - 0xf3, 0x8e, 0xb0, 0xe2, 0xd8, 0xcd, 0x18, 0xf7, 0xe8, 0x86, 0xbe, 0x16, 0x78, 0xa8, 0x2d, 0x8f, - 0x26, 0xb4, 0xf5, 0x17, 0xf2, 0x9f, 0xbe, 0xaa, 0xa6, 0x6a, 0x1e, 0x14, 0x57, 0x37, 0xc7, 0x2a, - 0x92, 0x9f, 0x2c, 0xc3, 0x0f, 0xc6, 0xc7, 0xac, 0x1d, 0xe8, 0x68, 0x14, 0x90, 0x90, 0xd7, 0x6e, - 0x06, 0x47, 0xb3, 0x55, 0xf5, 0xa6, 0x39, 0x75, 0xa2, 0x7a, 0x6f, 0x43, 0xf1, 0x9c, 0x58, 0xaf, - 0x44, 0x7a, 0x82, 0xf5, 0x02, 0x33, 0xb0, 0xd4, 0xa2, 0xfd, 0x7e, 0x05, 0x39, 0x51, 0x76, 0xe8, - 0x53, 0x28, 0x0c, 0xe9, 0xcc, 0x0b, 0xd7, 0x6f, 0xd2, 0x4e, 0x52, 0xd2, 0xb8, 0x27, 0xaa, 0xa5, - 0x15, 0xb0, 0xb6, 0x0f, 0xf9, 0xc8, 0x85, 0x1e, 0xae, 0xf4, 0x56, 0x6e, 0xde, 0xba, 0xd2, 0x02, - 0x9b, 0x8f, 0xd4, 0x99, 0xe5, 0xce, 0xc4, 0x41, 0x65, 0x2c, 0x26, 0xb5, 0xbf, 0x48, 0x90, 0xc7, - 0xac, 0xaa, 0x83, 0x30, 0xf1, 0xbc, 0x65, 0x37, 0x9e, 0xb7, 0xb5, 0x10, 0xa4, 0x37, 0x84, 0x20, - 0xee, 0xe5, 0x4c, 0xa2, 0x97, 0xd7, 0x2c, 0xc9, 0xdf, 0xc9, 0x52, 0x36, 0xc1, 0x52, 0xcc, 0x72, - 0x2e, 0xc1, 0xf2, 0x43, 0xd8, 0x1e, 0xf9, 0x74, 0xc2, 0x1f, 0x30, 0xea, 0x5b, 0xfe, 0x3c, 0x52, - 0xdb, 0x2d, 0x66, 0x1d, 0xc4, 0xc6, 0x4d, 0x82, 0x0b, 0x9b, 0x04, 0xd7, 0x4c, 0x28, 0x60, 0x12, - 0x4c, 0xa9, 0x17, 0x90, 0xf7, 0xe6, 0x84, 0x40, 0xb6, 0xad, 0xd0, 0xe2, 0x19, 0x95, 0x31, 0x1f, - 0xa3, 0x47, 0x20, 0x0f, 0xa9, 0x2d, 0xf2, 0xd9, 0x4e, 0xb6, 0xb4, 0xe1, 0xfb, 0xd4, 0x6f, 0x51, - 0x9b, 0x60, 0x0e, 0xa8, 0x4d, 0x41, 0x69, 0xd3, 0x73, 0xcf, 0xa5, 0x96, 0x7d, 0xe4, 0xd3, 0x31, - 0x7b, 0x65, 0xde, 0xab, 0x96, 0x6d, 0xc8, 0xcf, 0xb8, 0x9e, 0xc6, 0x7a, 0xf9, 0x60, 0xb3, 0x63, - 0xaf, 0x06, 0x12, 0xe2, 0x1b, 0x6b, 0x51, 0xb4, 0xb4, 0xf6, 0x6f, 0x09, 0xb4, 0xf7, 0xa3, 0x51, - 0x07, 0x4a, 0x02, 0x69, 0x26, 0x7e, 0xac, 0xea, 0x3f, 0x64, 0x23, 0x2e, 0x16, 0x30, 0x5b, 0x8d, - 0xbf, 0xf3, 0x55, 0x4e, 0x68, 0x67, 0xe6, 0x87, 0x69, 0xe7, 0x23, 0xd8, 0x12, 0xaa, 0x11, 0xff, - 0x83, 0xc8, 0x7a, 0xa6, 0x9e, 0x6d, 0xa6, 0x95, 0x14, 0x2e, 0x9f, 0x88, 0x36, 0x13, 0x7f, 0x20, - 0x77, 0x37, 0xe4, 0x45, 0x54, 0xc7, 0x5a, 0x4c, 0x6a, 0x39, 0x90, 0x8f, 0x1c, 0x6f, 0x5c, 0xab, - 0x42, 0xb6, 0xe5, 0x52, 0x7e, 0x9f, 0x39, 0x9f, 0x58, 0x01, 0xf5, 0x62, 0x9a, 0xc5, 0x6c, 0xef, - 0xaf, 0x69, 0x28, 0x25, 0x7e, 0x1f, 0xd1, 0x53, 0xd8, 0x6e, 0x1d, 0x1e, 0xf7, 0x07, 0x06, 0x36, - 0x5b, 0xbd, 0xee, 0x7e, 0xe7, 0x40, 0x49, 0x69, 0x77, 0x16, 0x4b, 0x5d, 0x9d, 0xac, 0x41, 0x9b, - 0x7f, 0x86, 0x55, 0xc8, 0x76, 0xba, 0x6d, 0xe3, 0x77, 0x8a, 0xa4, 0xdd, 0x5c, 0x2c, 0x75, 0x25, - 0x01, 0x14, 0xcf, 0xec, 0xc7, 0x50, 0xe6, 0x00, 0xf3, 0xf8, 0xa8, 0xdd, 0x18, 0x18, 0x4a, 0x5a, - 0xd3, 0x16, 0x4b, 0x7d, 0xf7, 0x2a, 0x2e, 0xba, 0x92, 0xfb, 0x90, 0xc7, 0xc6, 0x6f, 0x8f, 0x8d, - 0xfe, 0x40, 0xc9, 0x68, 0xbb, 0x8b, 0xa5, 0x8e, 0x12, 0xc0, 0xb8, 0xe3, 0x1e, 0x42, 0x01, 0x1b, - 0xfd, 0xa3, 0x5e, 0xb7, 0x6f, 0x28, 0xb2, 0xf6, 0x7f, 0x8b, 0xa5, 0x7e, 0x63, 0x03, 0x15, 0x15, - 0xf1, 0x4f, 0x61, 0xa7, 0xdd, 0xfb, 0xbc, 0x7b, 0xd8, 0x6b, 0xb4, 0xcd, 0x23, 0xdc, 0x3b, 0xc0, - 0x46, 0xbf, 0xaf, 0x64, 0xb5, 0xea, 0x62, 0xa9, 0xdf, 0x4e, 0xe0, 0xaf, 0xd5, 0xe4, 0x5d, 0x90, - 0x8f, 0x3a, 0xdd, 0x03, 0x25, 0xa7, 0xdd, 0x58, 0x2c, 0xf5, 0x0f, 0x12, 0x50, 0x46, 0x2a, 0xcb, - 0xb8, 0x75, 0xd8, 0xeb, 0x1b, 0x4a, 0xfe, 0x5a, 0xc6, 0x9c, 0xec, 0xbd, 0xdf, 0x03, 0xba, 0xfe, - 0x83, 0x8d, 0x1e, 0x80, 0xdc, 0xed, 0x75, 0x0d, 0x25, 0x25, 0xf2, 0xbf, 0x8e, 0xe8, 0x52, 0x8f, - 0xa0, 0x1a, 0x64, 0x0e, 0xbf, 0xf8, 0x4c, 0x91, 0xb4, 0xff, 0x5f, 0x2c, 0xf5, 0x5b, 0xd7, 0x41, - 0x87, 0x5f, 0x7c, 0xb6, 0x47, 0xa1, 0x94, 0x0c, 0x5c, 0x83, 0xc2, 0x73, 0x63, 0xd0, 0x68, 0x37, - 0x06, 0x0d, 0x25, 0x25, 0x8e, 0x14, 0xbb, 0x9f, 0x93, 0xd0, 0xe2, 0x3d, 0x7a, 0x07, 0xb2, 0x5d, - 0xe3, 0x85, 0x81, 0x15, 0x49, 0xdb, 0x59, 0x2c, 0xf5, 0xad, 0x18, 0xd0, 0x25, 0x67, 0xc4, 0x47, - 0x15, 0xc8, 0x35, 0x0e, 0x3f, 0x6f, 0xbc, 0xec, 0x2b, 0x69, 0x0d, 0x2d, 0x96, 0xfa, 0x76, 0xec, - 0x6e, 0xb8, 0xe7, 0xd6, 0x3c, 0xd8, 0xfb, 0x8f, 0x04, 0xe5, 0xe4, 0x33, 0x89, 0x2a, 0x20, 0xef, - 0x77, 0x0e, 0x8d, 0x78, 0xbb, 0xa4, 0x8f, 0x8d, 0x51, 0x1d, 0x8a, 0xed, 0x0e, 0x36, 0x5a, 0x83, - 0x1e, 0x7e, 0x19, 0xe7, 0x92, 0x04, 0xb5, 0x1d, 0x9f, 0xd7, 0xff, 0x1c, 0xfd, 0x1c, 0xca, 0xfd, - 0x97, 0xcf, 0x0f, 0x3b, 0xdd, 0xdf, 0x98, 0x3c, 0x62, 0x5a, 0x7b, 0xb4, 0x58, 0xea, 0xf7, 0x36, - 0xc0, 0x64, 0xea, 0x93, 0xa1, 0x15, 0x12, 0xbb, 0x2f, 0x9e, 0x7c, 0xe6, 0x2c, 0x48, 0xa8, 0x05, - 0x3b, 0xf1, 0xd2, 0xf5, 0x66, 0x19, 0xed, 0xe3, 0xc5, 0x52, 0xff, 0xf0, 0x7b, 0xd7, 0xaf, 0x76, - 0x2f, 0x48, 0xe8, 0x01, 0xe4, 0xa3, 0x20, 0x71, 0x25, 0x25, 0x97, 0x46, 0x0b, 0xf6, 0xfe, 0x2c, - 0x41, 0x71, 0xa5, 0x66, 0x8c, 0xf0, 0x6e, 0xcf, 0x34, 0x30, 0xee, 0xe1, 0x98, 0x81, 0x95, 0xb3, - 0x4b, 0xf9, 0x10, 0xdd, 0x83, 0xfc, 0x81, 0xd1, 0x35, 0x70, 0xa7, 0x15, 0x37, 0xc6, 0x0a, 0x72, - 0x40, 0x3c, 0xe2, 0x3b, 0x43, 0xf4, 0x11, 0x94, 0xbb, 0x3d, 0xb3, 0x7f, 0xdc, 0x7a, 0x16, 0xa7, - 0xce, 0xf7, 0x4f, 0x84, 0xea, 0xcf, 0x86, 0xa7, 0x9c, 0xcf, 0x3d, 0xd6, 0x43, 0x2f, 0x1a, 0x87, - 0x9d, 0xb6, 0x80, 0x66, 0x34, 0x75, 0xb1, 0xd4, 0x6f, 0xae, 0xa0, 0xd1, 0x1b, 0xce, 0xb0, 0x7b, - 0x36, 0x54, 0xbe, 0x5f, 0xb7, 0x90, 0x0e, 0xb9, 0xc6, 0xd1, 0x91, 0xd1, 0x6d, 0xc7, 0xa7, 0x5f, - 0xfb, 0x1a, 0xd3, 0x29, 0xf1, 0x6c, 0x86, 0xd8, 0xef, 0xe1, 0x03, 0x63, 0x10, 0x1f, 0x7e, 0x8d, - 0xd8, 0xa7, 0xec, 0x7f, 0xab, 0x59, 0x7f, 0xf3, 0x4d, 0x25, 0xf5, 0xf6, 0x9b, 0x4a, 0xea, 0xcd, - 0x65, 0x45, 0x7a, 0x7b, 0x59, 0x91, 0xfe, 0x71, 0x59, 0x49, 0x7d, 0x7b, 0x59, 0x91, 0xfe, 0xf8, - 0xae, 0x92, 0xfa, 0xea, 0x5d, 0x45, 0x7a, 0xfb, 0xae, 0x92, 0xfa, 0xdb, 0xbb, 0x4a, 0xea, 0x24, - 0xc7, 0x35, 0xef, 0xd3, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0xfb, 0x99, 0x31, 0x0e, 0x75, 0x0f, - 0x00, 0x00, + 0xc5, 0x99, 0x1c, 0x7a, 0xdb, 0x7d, 0xef, 0xb3, 0x6f, 0xf7, 0x7d, 0xf6, 0xbd, 0xcf, 0x2e, 0xec, + 0xba, 0xce, 0xf0, 0xc9, 0xd4, 0xa7, 0x21, 0x1d, 0x51, 0xf7, 0xc9, 0x90, 0x4c, 0x1f, 0xf3, 0x09, + 0x2a, 0xc4, 0x36, 0xed, 0xbe, 0x4f, 0xa6, 0x34, 0x10, 0x98, 0xe1, 0x6c, 0xfc, 0xe4, 0x84, 0x9e, + 0x50, 0x3e, 0xe1, 0x23, 0x01, 0xaf, 0x4d, 0x21, 0xfb, 0x8c, 0xb8, 0x2e, 0x45, 0x55, 0x28, 0xd9, + 0xe4, 0xcc, 0x19, 0x11, 0xd3, 0xb3, 0x26, 0x44, 0x95, 0x74, 0xa9, 0x5e, 0xc4, 0x20, 0x4c, 0x5d, + 0x6b, 0x42, 0x18, 0x60, 0xe4, 0x3a, 0xc4, 0x0b, 0x05, 0x20, 0x2d, 0x00, 0xc2, 0xc4, 0x01, 0x0f, + 0x61, 0x3b, 0x02, 0x9c, 0x11, 0x3f, 0x70, 0xa8, 0xa7, 0x66, 0x38, 0x66, 0x4b, 0x58, 0x5f, 0x08, + 0x63, 0x2d, 0x80, 0xdc, 0x33, 0x62, 0xd9, 0xc4, 0x47, 0x1f, 0x81, 0x1c, 0xce, 0xa7, 0x62, 0xaf, + 0xed, 0x4f, 0x6e, 0x3d, 0x8e, 0x4f, 0xfe, 0xf8, 0x39, 0x09, 0x02, 0xeb, 0x84, 0x0c, 0xe6, 0x53, + 0x82, 0x39, 0x04, 0xfd, 0x1a, 0x4a, 0x23, 0x3a, 0x99, 0xfa, 0x24, 0xe0, 0x81, 0xd3, 0x7c, 0xc5, + 0x9d, 0x6b, 0x2b, 0x5a, 0x6b, 0x0c, 0x4e, 0x2e, 0xa8, 0x35, 0x60, 0xab, 0xe5, 0xce, 0x82, 0x90, + 0xf8, 0x2d, 0xea, 0x8d, 0x9d, 0x13, 0xf4, 0x14, 0xf2, 0x63, 0xea, 0xda, 0xc4, 0x0f, 0x54, 0x49, + 0xcf, 0xd4, 0x4b, 0x9f, 0x28, 0xeb, 0x60, 0xfb, 0xdc, 0xd1, 0x94, 0xdf, 0x5c, 0x54, 0x53, 0x38, + 0x86, 0xd5, 0xbe, 0x4e, 0x43, 0x4e, 0x78, 0xd0, 0x2e, 0xa4, 0x1d, 0x5b, 0x50, 0xd4, 0xcc, 0x5d, + 0x5e, 0x54, 0xd3, 0x9d, 0x36, 0x4e, 0x3b, 0x36, 0xba, 0x09, 0x59, 0xd7, 0x1a, 0x12, 0x37, 0x22, + 0x47, 0x4c, 0xd0, 0x6d, 0x28, 0xfa, 0xc4, 0xb2, 0x4d, 0xea, 0xb9, 0x73, 0x4e, 0x49, 0x01, 0x17, + 0x98, 0xa1, 0xe7, 0xb9, 0x73, 0xf4, 0x23, 0x40, 0xce, 0x89, 0x47, 0x7d, 0x62, 0x4e, 0x89, 0x3f, + 0x71, 0xf8, 0x69, 0x03, 0x55, 0xe6, 0xa8, 0x1d, 0xe1, 0x39, 0x5a, 0x3b, 0xd0, 0x7d, 0xd8, 0x8a, + 0xe0, 0x36, 0x71, 0x49, 0x48, 0xd4, 0x2c, 0x47, 0x96, 0x85, 0xb1, 0xcd, 0x6d, 0xe8, 0x29, 0xdc, + 0xb4, 0x9d, 0xc0, 0x1a, 0xba, 0xc4, 0x0c, 0xc9, 0x64, 0x6a, 0x3a, 0x9e, 0x4d, 0x5e, 0x93, 0x40, + 0xcd, 0x71, 0x2c, 0x8a, 0x7c, 0x03, 0x32, 0x99, 0x76, 0x84, 0x07, 0xed, 0x42, 0x6e, 0x6a, 0xcd, + 0x02, 0x62, 0xab, 0x79, 0x8e, 0x89, 0x66, 0x8c, 0x25, 0x51, 0x01, 0x81, 0xaa, 0x5c, 0x65, 0xa9, + 0xcd, 0x1d, 0x31, 0x4b, 0x11, 0xac, 0xf6, 0xaf, 0x34, 0xe4, 0x84, 0x07, 0x7d, 0xb8, 0x62, 0xa9, + 0xdc, 0xdc, 0x65, 0xa8, 0xbf, 0x5f, 0x54, 0x0b, 0xc2, 0xd7, 0x69, 0x27, 0x58, 0x43, 0x20, 0x27, + 0x2a, 0x8a, 0x8f, 0xd1, 0x1d, 0x28, 0x5a, 0xb6, 0xcd, 0x6e, 0x8f, 0x04, 0x6a, 0x46, 0xcf, 0xd4, + 0x8b, 0x78, 0x6d, 0x40, 0x3f, 0xdb, 0xac, 0x06, 0xf9, 0x6a, 0xfd, 0xbc, 0xaf, 0x0c, 0xd8, 0x55, + 0x8c, 0x88, 0x1f, 0x55, 0x70, 0x96, 0xef, 0x57, 0x60, 0x06, 0x5e, 0xbf, 0xf7, 0xa0, 0x3c, 0xb1, + 0x5e, 0x9b, 0x01, 0xf9, 0xc3, 0x8c, 0x78, 0x23, 0xc2, 0xe9, 0xca, 0xe0, 0xd2, 0xc4, 0x7a, 0xdd, + 0x8f, 0x4c, 0xa8, 0x02, 0xe0, 0x78, 0xa1, 0x4f, 0xed, 0xd9, 0x88, 0xf8, 0x11, 0x57, 0x09, 0x0b, + 0xfa, 0x09, 0x14, 0x38, 0xd9, 0xa6, 0x63, 0xab, 0x05, 0x5d, 0xaa, 0xcb, 0x4d, 0x2d, 0x4a, 0x3c, + 0xcf, 0xa9, 0xe6, 0x79, 0xc7, 0x43, 0x9c, 0xe7, 0xd8, 0x8e, 0x8d, 0x7e, 0x09, 0x5a, 0xf0, 0xca, + 0x61, 0x17, 0x25, 0x22, 0x85, 0x0e, 0xf5, 0x4c, 0x9f, 0x4c, 0xe8, 0x99, 0xe5, 0x06, 0x6a, 0x91, + 0x6f, 0xa3, 0x32, 0x44, 0x27, 0x01, 0xc0, 0x91, 0xbf, 0xd6, 0x83, 0x2c, 0x8f, 0xc8, 0x6e, 0x51, + 0x14, 0x6b, 0xd4, 0xbd, 0xd1, 0x0c, 0x3d, 0x86, 0xec, 0xd8, 0x71, 0x49, 0xa0, 0xa6, 0xf9, 0x1d, + 0xa2, 0x44, 0xa5, 0x3b, 0x2e, 0xe9, 0x78, 0x63, 0x1a, 0xdd, 0xa2, 0x80, 0xd5, 0x8e, 0xa1, 0xc4, + 0x03, 0x1e, 0x4f, 0x6d, 0x2b, 0x24, 0xff, 0xb3, 0xb0, 0x5f, 0x67, 0xa1, 0x10, 0x7b, 0x56, 0x97, + 0x2e, 0x25, 0x2e, 0x1d, 0x81, 0x1c, 0x38, 0x5f, 0x12, 0xde, 0x23, 0x19, 0xcc, 0xc7, 0xe8, 0x2e, + 0xc0, 0x84, 0xda, 0xce, 0xd8, 0x21, 0xb6, 0x19, 0xf0, 0x2b, 0xcb, 0xe0, 0x62, 0x6c, 0xe9, 0xa3, + 0xa7, 0x50, 0x5a, 0xb9, 0x87, 0x73, 0xb5, 0xcc, 0x39, 0xff, 0x20, 0xe6, 0xbc, 0x7f, 0x4a, 0xfd, + 0xb0, 0xd3, 0xc6, 0xab, 0x10, 0xcd, 0x39, 0x2b, 0xe9, 0x58, 0x9e, 0x18, 0xb1, 0x1b, 0x25, 0xfd, + 0x82, 0x8c, 0x42, 0xba, 0x6a, 0xfc, 0x08, 0x86, 0x34, 0x28, 0xac, 0x6a, 0x02, 0xf8, 0x01, 0x56, + 0x73, 0xf4, 0x63, 0xc8, 0x0d, 0x5d, 0x3a, 0x7a, 0x15, 0xf7, 0xc7, 0x8d, 0x75, 0xb0, 0x26, 0xb3, + 0x27, 0x58, 0x88, 0x80, 0x4c, 0x26, 0x83, 0xf9, 0xc4, 0x75, 0xbc, 0x57, 0x66, 0x68, 0xf9, 0x27, + 0x24, 0x54, 0x77, 0x84, 0x4c, 0x46, 0xd6, 0x01, 0x37, 0x32, 0xb9, 0x15, 0x0b, 0xcc, 0x53, 0x2b, + 0x38, 0x55, 0x11, 0x6b, 0x23, 0x0c, 0xc2, 0xf4, 0xcc, 0x0a, 0x4e, 0xd1, 0x5e, 0xa4, 0x9e, 0x42, + 0x0b, 0x77, 0xaf, 0xb3, 0x9f, 0x90, 0x4f, 0x1d, 0x4a, 0x57, 0xe5, 0x65, 0x0b, 0x27, 0x4d, 0x6c, + 0xbb, 0x15, 0x91, 0x5e, 0xa0, 0x96, 0x74, 0xa9, 0x9e, 0x5d, 0xf3, 0xd6, 0x0d, 0xd0, 0x13, 0x10, + 0x9b, 0x9b, 0xfc, 0x8a, 0xb6, 0x98, 0xbf, 0xa9, 0x5c, 0x5e, 0x54, 0xcb, 0xd8, 0x3a, 0xe7, 0xa9, + 0xf6, 0x9d, 0x2f, 0x09, 0x2e, 0x0e, 0xe3, 0x21, 0xdb, 0xd3, 0xa5, 0x23, 0xcb, 0x35, 0xc7, 0xae, + 0x75, 0x12, 0xa8, 0xdf, 0xe6, 0xf9, 0xa6, 0xc0, 0x6d, 0xfb, 0xcc, 0x84, 0x6a, 0x50, 0x8e, 0x38, + 0x16, 0x39, 0xfe, 0x33, 0xcf, 0x93, 0x2c, 0x45, 0x46, 0x9e, 0xa5, 0xca, 0x14, 0x88, 0xa9, 0x9a, + 0x1d, 0xc9, 0x57, 0x3c, 0x45, 0x75, 0xc8, 0x3b, 0xde, 0x99, 0xe5, 0x3a, 0x91, 0x68, 0x35, 0xb7, + 0x2f, 0x2f, 0xaa, 0x80, 0xad, 0xf3, 0x8e, 0xb0, 0xe2, 0xd8, 0xcd, 0x18, 0xf7, 0xe8, 0x86, 0xbe, + 0x16, 0x78, 0xa8, 0x2d, 0x8f, 0x26, 0xb4, 0xf5, 0x17, 0xf2, 0x9f, 0xbe, 0xaa, 0xa6, 0x6a, 0x1e, + 0x14, 0x57, 0x37, 0xc7, 0x2a, 0x92, 0x9f, 0x2c, 0xc3, 0x0f, 0xc6, 0xc7, 0xac, 0x1d, 0xe8, 0x78, + 0x1c, 0x90, 0x90, 0xd7, 0x6e, 0x06, 0x47, 0xb3, 0x55, 0xf5, 0xa6, 0x39, 0x75, 0xa2, 0x7a, 0x6f, + 0x43, 0xf1, 0x9c, 0x58, 0xaf, 0x44, 0x7a, 0x82, 0xf5, 0x02, 0x33, 0xb0, 0xd4, 0xa2, 0xfd, 0x7e, + 0x05, 0x39, 0x51, 0x76, 0xe8, 0x53, 0x28, 0x8c, 0xe8, 0xcc, 0x0b, 0xd7, 0x6f, 0xd2, 0x4e, 0x52, + 0xd2, 0xb8, 0x27, 0xaa, 0xa5, 0x15, 0xb0, 0xb6, 0x0f, 0xf9, 0xc8, 0x85, 0x1e, 0xae, 0xf4, 0x56, + 0x6e, 0xde, 0xba, 0xd2, 0x02, 0x9b, 0x8f, 0xd4, 0x99, 0xe5, 0xce, 0xc4, 0x41, 0x65, 0x2c, 0x26, + 0xb5, 0xbf, 0x48, 0x90, 0xc7, 0xac, 0xaa, 0x83, 0x30, 0xf1, 0xbc, 0x65, 0x37, 0x9e, 0xb7, 0xb5, + 0x10, 0xa4, 0x37, 0x84, 0x20, 0xee, 0xe5, 0x4c, 0xa2, 0x97, 0xd7, 0x2c, 0xc9, 0xdf, 0xc9, 0x52, + 0x36, 0xc1, 0x52, 0xcc, 0x72, 0x2e, 0xc1, 0xf2, 0x43, 0xd8, 0x1e, 0xfb, 0x74, 0xc2, 0x1f, 0x30, + 0xea, 0x5b, 0xfe, 0x3c, 0x52, 0xdb, 0x2d, 0x66, 0x1d, 0xc4, 0xc6, 0x4d, 0x82, 0x0b, 0x9b, 0x04, + 0xd7, 0x4c, 0x28, 0x60, 0x12, 0x4c, 0xa9, 0x17, 0x90, 0xf7, 0xe6, 0x84, 0x40, 0xb6, 0xad, 0xd0, + 0xe2, 0x19, 0x95, 0x31, 0x1f, 0xa3, 0x47, 0x20, 0x8f, 0xa8, 0x2d, 0xf2, 0xd9, 0x4e, 0xb6, 0xb4, + 0xe1, 0xfb, 0xd4, 0x6f, 0x51, 0x9b, 0x60, 0x0e, 0xa8, 0x4d, 0x41, 0x69, 0xd3, 0x73, 0xcf, 0xa5, + 0x96, 0x7d, 0xe4, 0xd3, 0x13, 0xf6, 0xca, 0xbc, 0x57, 0x2d, 0xdb, 0x90, 0x9f, 0x71, 0x3d, 0x8d, + 0xf5, 0xf2, 0xc1, 0x66, 0xc7, 0x5e, 0x0d, 0x24, 0xc4, 0x37, 0xd6, 0xa2, 0x68, 0x69, 0xed, 0xdf, + 0x12, 0x68, 0xef, 0x47, 0xa3, 0x0e, 0x94, 0x04, 0xd2, 0x4c, 0x7c, 0xac, 0xea, 0x3f, 0x64, 0x23, + 0x2e, 0x16, 0x30, 0x5b, 0x8d, 0xbf, 0xf3, 0x55, 0x4e, 0x68, 0x67, 0xe6, 0x87, 0x69, 0xe7, 0x23, + 0xd8, 0x12, 0xaa, 0x11, 0xff, 0x41, 0x64, 0x3d, 0x53, 0xcf, 0x36, 0xd3, 0x4a, 0x0a, 0x97, 0x87, + 0xa2, 0xcd, 0xc4, 0x0f, 0xe4, 0xee, 0x86, 0xbc, 0x88, 0xea, 0x58, 0x8b, 0x49, 0x2d, 0x07, 0xf2, + 0x91, 0xe3, 0x9d, 0xd4, 0xaa, 0x90, 0x6d, 0xb9, 0x94, 0xdf, 0x67, 0xce, 0x27, 0x56, 0x40, 0xbd, + 0x98, 0x66, 0x31, 0xdb, 0xfb, 0x6b, 0x1a, 0x4a, 0x89, 0xef, 0x23, 0x7a, 0x0a, 0xdb, 0xad, 0xc3, + 0xe3, 0xfe, 0xc0, 0xc0, 0x66, 0xab, 0xd7, 0xdd, 0xef, 0x1c, 0x28, 0x29, 0xed, 0xce, 0x62, 0xa9, + 0xab, 0x93, 0x35, 0x68, 0xf3, 0x67, 0x58, 0x85, 0x6c, 0xa7, 0xdb, 0x36, 0x7e, 0xa7, 0x48, 0xda, + 0xcd, 0xc5, 0x52, 0x57, 0x12, 0x40, 0xf1, 0xcc, 0x7e, 0x0c, 0x65, 0x0e, 0x30, 0x8f, 0x8f, 0xda, + 0x8d, 0x81, 0xa1, 0xa4, 0x35, 0x6d, 0xb1, 0xd4, 0x77, 0xaf, 0xe2, 0xa2, 0x2b, 0xb9, 0x0f, 0x79, + 0x6c, 0xfc, 0xf6, 0xd8, 0xe8, 0x0f, 0x94, 0x8c, 0xb6, 0xbb, 0x58, 0xea, 0x28, 0x01, 0x8c, 0x3b, + 0xee, 0x21, 0x14, 0xb0, 0xd1, 0x3f, 0xea, 0x75, 0xfb, 0x86, 0x22, 0x6b, 0xff, 0xb7, 0x58, 0xea, + 0x37, 0x36, 0x50, 0x51, 0x11, 0xff, 0x14, 0x76, 0xda, 0xbd, 0xcf, 0xbb, 0x87, 0xbd, 0x46, 0xdb, + 0x3c, 0xc2, 0xbd, 0x03, 0x6c, 0xf4, 0xfb, 0x4a, 0x56, 0xab, 0x2e, 0x96, 0xfa, 0xed, 0x04, 0xfe, + 0x5a, 0x4d, 0xde, 0x05, 0xf9, 0xa8, 0xd3, 0x3d, 0x50, 0x72, 0xda, 0x8d, 0xc5, 0x52, 0xff, 0x20, + 0x01, 0x65, 0xa4, 0xb2, 0x8c, 0x5b, 0x87, 0xbd, 0xbe, 0xa1, 0xe4, 0xaf, 0x65, 0xcc, 0xc9, 0xde, + 0xfb, 0x3d, 0xa0, 0xeb, 0x1f, 0x6c, 0xf4, 0x00, 0xe4, 0x6e, 0xaf, 0x6b, 0x28, 0x29, 0x91, 0xff, + 0x75, 0x44, 0x97, 0x7a, 0x04, 0xd5, 0x20, 0x73, 0xf8, 0xc5, 0x67, 0x8a, 0xa4, 0xfd, 0xff, 0x62, + 0xa9, 0xdf, 0xba, 0x0e, 0x3a, 0xfc, 0xe2, 0xb3, 0x3d, 0x0a, 0xa5, 0x64, 0xe0, 0x1a, 0x14, 0x9e, + 0x1b, 0x83, 0x46, 0xbb, 0x31, 0x68, 0x28, 0x29, 0x71, 0xa4, 0xd8, 0xfd, 0x9c, 0x84, 0x16, 0xef, + 0xd1, 0x3b, 0x90, 0xed, 0x1a, 0x2f, 0x0c, 0xac, 0x48, 0xda, 0xce, 0x62, 0xa9, 0x6f, 0xc5, 0x80, + 0x2e, 0x39, 0x23, 0x3e, 0xaa, 0x40, 0xae, 0x71, 0xf8, 0x79, 0xe3, 0x65, 0x5f, 0x49, 0x6b, 0x68, + 0xb1, 0xd4, 0xb7, 0x63, 0x77, 0xc3, 0x3d, 0xb7, 0xe6, 0xc1, 0xde, 0x7f, 0x24, 0x28, 0x27, 0x9f, + 0x49, 0x54, 0x01, 0x79, 0xbf, 0x73, 0x68, 0xc4, 0xdb, 0x25, 0x7d, 0x6c, 0x8c, 0xea, 0x50, 0x6c, + 0x77, 0xb0, 0xd1, 0x1a, 0xf4, 0xf0, 0xcb, 0x38, 0x97, 0x24, 0xa8, 0xed, 0xf8, 0xbc, 0xfe, 0xe7, + 0xe8, 0xe7, 0x50, 0xee, 0xbf, 0x7c, 0x7e, 0xd8, 0xe9, 0xfe, 0xc6, 0xe4, 0x11, 0xd3, 0xda, 0xa3, + 0xc5, 0x52, 0xbf, 0xb7, 0x01, 0x26, 0x53, 0x9f, 0x8c, 0xac, 0x90, 0xd8, 0x7d, 0xf1, 0xe4, 0x33, + 0x67, 0x41, 0x42, 0x2d, 0xd8, 0x89, 0x97, 0xae, 0x37, 0xcb, 0x68, 0x1f, 0x2f, 0x96, 0xfa, 0x87, + 0xdf, 0xbb, 0x7e, 0xb5, 0x7b, 0x41, 0x42, 0x0f, 0x20, 0x1f, 0x05, 0x89, 0x2b, 0x29, 0xb9, 0x34, + 0x5a, 0xb0, 0xf7, 0x67, 0x09, 0x8a, 0x2b, 0x35, 0x63, 0x84, 0x77, 0x7b, 0xa6, 0x81, 0x71, 0x0f, + 0xc7, 0x0c, 0xac, 0x9c, 0x5d, 0xca, 0x87, 0xe8, 0x1e, 0xe4, 0x0f, 0x8c, 0xae, 0x81, 0x3b, 0xad, + 0xb8, 0x31, 0x56, 0x90, 0x03, 0xe2, 0x11, 0xdf, 0x19, 0xa1, 0x8f, 0xa0, 0xdc, 0xed, 0x99, 0xfd, + 0xe3, 0xd6, 0xb3, 0x38, 0x75, 0xbe, 0x7f, 0x22, 0x54, 0x7f, 0x36, 0x3a, 0xe5, 0x7c, 0xee, 0xb1, + 0x1e, 0x7a, 0xd1, 0x38, 0xec, 0xb4, 0x05, 0x34, 0xa3, 0xa9, 0x8b, 0xa5, 0x7e, 0x73, 0x05, 0x8d, + 0xde, 0x70, 0x86, 0xdd, 0xb3, 0xa1, 0xf2, 0xfd, 0xba, 0x85, 0x74, 0xc8, 0x35, 0x8e, 0x8e, 0x8c, + 0x6e, 0x3b, 0x3e, 0xfd, 0xda, 0xd7, 0x98, 0x4e, 0x89, 0x67, 0x33, 0xc4, 0x7e, 0x0f, 0x1f, 0x18, + 0x83, 0xf8, 0xf0, 0x6b, 0xc4, 0x3e, 0x65, 0xff, 0xad, 0x66, 0xfd, 0xcd, 0x37, 0x95, 0xd4, 0xdb, + 0x6f, 0x2a, 0xa9, 0x37, 0x97, 0x15, 0xe9, 0xed, 0x65, 0x45, 0xfa, 0xc7, 0x65, 0x25, 0xf5, 0xed, + 0x65, 0x45, 0xfa, 0xe3, 0xbb, 0x4a, 0xea, 0xab, 0x77, 0x15, 0xe9, 0xed, 0xbb, 0x4a, 0xea, 0x6f, + 0xef, 0x2a, 0xa9, 0x61, 0x8e, 0x6b, 0xde, 0xa7, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, 0xc7, 0x7a, + 0xfc, 0x00, 0x82, 0x0f, 0x00, 0x00, } func (m *Hello) Marshal() (dAtA []byte, err error) { diff --git a/lib/protocol/bep_extensions.go b/lib/protocol/bep_extensions.go index 76797c676..1d0500c4d 100644 --- a/lib/protocol/bep_extensions.go +++ b/lib/protocol/bep_extensions.go @@ -1,8 +1,5 @@ // Copyright (C) 2014 The Protocol Authors. -//go:generate go run ../../script/protofmt.go bep.proto -//go:generate protoc -I ../../ -I . --gogofast_out=. bep.proto - package protocol import ( diff --git a/lib/protocol/deviceid_test.go b/lib/protocol/deviceid_test.go index a11e8e2c1..44062517d 100644 --- a/lib/protocol/deviceid_test.go +++ b/lib/protocol/deviceid_test.go @@ -1,6 +1,6 @@ // Copyright (C) 2014 The Protocol Authors. -//go:generate go run ../../script/protofmt.go deviceid_test.proto +//go:generate go run ../../proto/scripts/protofmt.go deviceid_test.proto //go:generate protoc -I ../../ -I . --gogofast_out=. deviceid_test.proto package protocol diff --git a/lib/rc/rc.go b/lib/rc/rc.go index a6d658a15..6825d85a5 100644 --- a/lib/rc/rc.go +++ b/lib/rc/rc.go @@ -499,7 +499,7 @@ func (p *Process) eventLoop() { p.id = id home := data["home"].(string) - w, err := config.Load(filepath.Join(home, "config.xml"), protocol.LocalDeviceID, events.NoopLogger) + w, _, err := config.Load(filepath.Join(home, "config.xml"), protocol.LocalDeviceID, events.NoopLogger) if err != nil { log.Println("eventLoop: Starting:", err) continue diff --git a/lib/syncthing/utils.go b/lib/syncthing/utils.go index 18c1725dd..f2a119e32 100644 --- a/lib/syncthing/utils.go +++ b/lib/syncthing/utils.go @@ -63,7 +63,7 @@ func DefaultConfig(path string, myID protocol.DeviceID, evLogger events.Logger, // necessary or returns an error, if the version isn't compatible. func LoadConfigAtStartup(path string, cert tls.Certificate, evLogger events.Logger, allowNewerConfig, noDefaultFolder bool) (config.Wrapper, error) { myID := protocol.NewDeviceID(cert.Certificate[0]) - cfg, err := config.Load(path, myID, evLogger) + cfg, originalVersion, err := config.Load(path, myID, evLogger) if fs.IsNotExist(err) { cfg, err = DefaultConfig(path, myID, evLogger, noDefaultFolder) if err != nil { @@ -80,14 +80,14 @@ func LoadConfigAtStartup(path string, cert tls.Certificate, evLogger events.Logg return nil, errors.Wrap(err, "failed to load config") } - if cfg.RawCopy().OriginalVersion != config.CurrentVersion { - if cfg.RawCopy().OriginalVersion == config.CurrentVersion+1101 { + if originalVersion != config.CurrentVersion { + if originalVersion == config.CurrentVersion+1101 { l.Infof("Now, THAT's what we call a config from the future! Don't worry. As long as you hit that wire with the connecting hook at precisely eighty-eight miles per hour the instant the lightning strikes the tower... everything will be fine.") } - if cfg.RawCopy().OriginalVersion > config.CurrentVersion && !allowNewerConfig { - return nil, fmt.Errorf("config file version (%d) is newer than supported version (%d). If this is expected, use -allow-newer-config to override.", cfg.RawCopy().OriginalVersion, config.CurrentVersion) + if originalVersion > config.CurrentVersion && !allowNewerConfig { + return nil, fmt.Errorf("config file version (%d) is newer than supported version (%d). If this is expected, use -allow-newer-config to override.", originalVersion, config.CurrentVersion) } - err = archiveAndSaveConfig(cfg) + err = archiveAndSaveConfig(cfg, originalVersion) if err != nil { return nil, errors.Wrap(err, "config archive") } @@ -96,9 +96,9 @@ func LoadConfigAtStartup(path string, cert tls.Certificate, evLogger events.Logg return cfg, nil } -func archiveAndSaveConfig(cfg config.Wrapper) error { +func archiveAndSaveConfig(cfg config.Wrapper, originalVersion int) error { // Copy the existing config to an archive copy - archivePath := cfg.ConfigPath() + fmt.Sprintf(".v%d", cfg.RawCopy().OriginalVersion) + archivePath := cfg.ConfigPath() + fmt.Sprintf(".v%d", originalVersion) l.Infoln("Archiving a copy of old config file format at:", archivePath) if err := copyFile(cfg.ConfigPath(), archivePath); err != nil { return err diff --git a/lib/util/utils.go b/lib/util/utils.go index 6b1c4da22..7b54701e6 100644 --- a/lib/util/utils.go +++ b/lib/util/utils.go @@ -58,14 +58,14 @@ func SetDefaults(data interface{}) { case string: f.SetString(v) - case int: + case int, uint32, int32, int64, uint64: i, err := strconv.ParseInt(v, 10, 64) if err != nil { panic(err) } f.SetInt(i) - case float64: + case float64, float32: i, err := strconv.ParseFloat(v, 64) if err != nil { panic(err) diff --git a/meta/gofmt_test.go b/meta/gofmt_test.go index 542c043b6..508ea7096 100644 --- a/meta/gofmt_test.go +++ b/meta/gofmt_test.go @@ -11,6 +11,7 @@ import ( "os" "os/exec" "path/filepath" + "strings" "testing" ) @@ -25,7 +26,7 @@ func TestCheckGoFmt(t *testing.T) { if path == ".git" { return filepath.SkipDir } - if filepath.Ext(path) != ".go" { + if filepath.Ext(path) != ".go" || strings.HasSuffix(path, ".pb.go") { return nil } cmd := exec.Command("gofmt", "-s", "-d", path) diff --git a/proto/ext.proto b/proto/ext.proto new file mode 100644 index 000000000..1b3da600b --- /dev/null +++ b/proto/ext.proto @@ -0,0 +1,24 @@ +syntax = "proto2"; + +package ext; + +import "google/protobuf/descriptor.proto"; + +option go_package = "github.com/syncthing/syncthing/proto/ext"; + +extend google.protobuf.MessageOptions { + optional bool xml_tags = 74001; +} + +extend google.protobuf.FieldOptions { + optional string xml = 75005; + optional string json = 75006; + optional string default = 75007; + optional bool restart = 75008; + optional bool device_id = 75009; + optional string goname = 75010; +} + +extend google.protobuf.EnumValueOptions { + optional string enumgoname = 76010; +} diff --git a/proto/ext/ext.pb.go b/proto/ext/ext.pb.go new file mode 100644 index 000000000..82a6747c6 --- /dev/null +++ b/proto/ext/ext.pb.go @@ -0,0 +1,131 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: ext.proto + +package ext + +import ( + fmt "fmt" + proto "github.com/gogo/protobuf/proto" + descriptor "github.com/gogo/protobuf/protoc-gen-gogo/descriptor" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +var E_XmlTags = &proto.ExtensionDesc{ + ExtendedType: (*descriptor.MessageOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 74001, + Name: "ext.xml_tags", + Tag: "varint,74001,opt,name=xml_tags", + Filename: "ext.proto", +} + +var E_Xml = &proto.ExtensionDesc{ + ExtendedType: (*descriptor.FieldOptions)(nil), + ExtensionType: (*string)(nil), + Field: 75005, + Name: "ext.xml", + Tag: "bytes,75005,opt,name=xml", + Filename: "ext.proto", +} + +var E_Json = &proto.ExtensionDesc{ + ExtendedType: (*descriptor.FieldOptions)(nil), + ExtensionType: (*string)(nil), + Field: 75006, + Name: "ext.json", + Tag: "bytes,75006,opt,name=json", + Filename: "ext.proto", +} + +var E_Default = &proto.ExtensionDesc{ + ExtendedType: (*descriptor.FieldOptions)(nil), + ExtensionType: (*string)(nil), + Field: 75007, + Name: "ext.default", + Tag: "bytes,75007,opt,name=default", + Filename: "ext.proto", +} + +var E_Restart = &proto.ExtensionDesc{ + ExtendedType: (*descriptor.FieldOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 75008, + Name: "ext.restart", + Tag: "varint,75008,opt,name=restart", + Filename: "ext.proto", +} + +var E_DeviceId = &proto.ExtensionDesc{ + ExtendedType: (*descriptor.FieldOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 75009, + Name: "ext.device_id", + Tag: "varint,75009,opt,name=device_id", + Filename: "ext.proto", +} + +var E_Goname = &proto.ExtensionDesc{ + ExtendedType: (*descriptor.FieldOptions)(nil), + ExtensionType: (*string)(nil), + Field: 75010, + Name: "ext.goname", + Tag: "bytes,75010,opt,name=goname", + Filename: "ext.proto", +} + +var E_Enumgoname = &proto.ExtensionDesc{ + ExtendedType: (*descriptor.EnumValueOptions)(nil), + ExtensionType: (*string)(nil), + Field: 76010, + Name: "ext.enumgoname", + Tag: "bytes,76010,opt,name=enumgoname", + Filename: "ext.proto", +} + +func init() { + proto.RegisterExtension(E_XmlTags) + proto.RegisterExtension(E_Xml) + proto.RegisterExtension(E_Json) + proto.RegisterExtension(E_Default) + proto.RegisterExtension(E_Restart) + proto.RegisterExtension(E_DeviceId) + proto.RegisterExtension(E_Goname) + proto.RegisterExtension(E_Enumgoname) +} + +func init() { proto.RegisterFile("ext.proto", fileDescriptor_95fe6908ffcf64d3) } + +var fileDescriptor_95fe6908ffcf64d3 = []byte{ + // 305 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0xd1, 0x3d, 0x4b, 0x03, 0x31, + 0x18, 0xc0, 0x71, 0x8e, 0x16, 0xdb, 0x66, 0xec, 0x24, 0x82, 0xb5, 0x6e, 0x9d, 0xee, 0x10, 0x41, + 0x31, 0x74, 0x52, 0x14, 0x1c, 0x44, 0x28, 0xe2, 0xe0, 0x52, 0xd2, 0xcb, 0xd3, 0x34, 0x92, 0x97, + 0x72, 0x49, 0x24, 0x6e, 0xea, 0x37, 0xf0, 0x2b, 0x39, 0x69, 0x27, 0xfd, 0x06, 0xd2, 0xd1, 0xef, + 0xe0, 0x0b, 0x77, 0x97, 0x93, 0x42, 0x87, 0xdb, 0x42, 0xf8, 0xff, 0x1e, 0x12, 0x1e, 0xd4, 0x01, + 0x6f, 0xe3, 0x79, 0xa6, 0xad, 0xee, 0x36, 0xc0, 0xdb, 0xad, 0x3e, 0xd3, 0x9a, 0x09, 0x48, 0x8a, + 0xab, 0x89, 0x9b, 0x26, 0x14, 0x4c, 0x9a, 0xf1, 0xb9, 0xd5, 0x59, 0x99, 0xe1, 0x21, 0x6a, 0x7b, + 0x29, 0xc6, 0x96, 0x30, 0xd3, 0xdd, 0x89, 0xcb, 0x3c, 0xae, 0xf2, 0xf8, 0x02, 0x8c, 0x21, 0x0c, + 0x2e, 0xe7, 0x96, 0x6b, 0x65, 0x36, 0x9f, 0x5f, 0x9a, 0xfd, 0x68, 0xd0, 0x1e, 0xb5, 0xbc, 0x14, + 0x57, 0x84, 0x19, 0xbc, 0x87, 0x1a, 0x5e, 0x8a, 0xee, 0xf6, 0x1a, 0x3c, 0xe3, 0x20, 0x68, 0xc5, + 0xbe, 0xdf, 0x72, 0xd6, 0x19, 0xe5, 0x2d, 0xde, 0x47, 0xcd, 0x5b, 0xa3, 0x55, 0x9d, 0xf9, 0x09, + 0xa6, 0x88, 0xf1, 0x11, 0x6a, 0x51, 0x98, 0x12, 0x27, 0x6c, 0x9d, 0xfb, 0x0d, 0xae, 0xea, 0x73, + 0x9a, 0x81, 0xb1, 0x24, 0xab, 0xa5, 0x0f, 0x8b, 0xf0, 0xbb, 0xd0, 0xe3, 0x21, 0xea, 0x50, 0xb8, + 0xe3, 0x29, 0x8c, 0x39, 0xad, 0xc3, 0x8f, 0x01, 0xb7, 0x4b, 0x71, 0x4e, 0xf1, 0x21, 0xda, 0x60, + 0x5a, 0x11, 0x09, 0x75, 0xf4, 0x69, 0x51, 0x3e, 0x39, 0xe4, 0xf8, 0x04, 0x21, 0x50, 0x4e, 0x06, + 0xbc, 0xbb, 0x86, 0x4f, 0x95, 0x93, 0xd7, 0x44, 0xb8, 0xff, 0xb5, 0x7c, 0x7d, 0x94, 0x03, 0x56, + 0xd8, 0xf1, 0xc1, 0xeb, 0xb2, 0x17, 0xbd, 0x2f, 0x7b, 0xd1, 0xe7, 0xb2, 0x17, 0xdd, 0x0c, 0x18, + 0xb7, 0x33, 0x37, 0x89, 0x53, 0x2d, 0x13, 0x73, 0xaf, 0x52, 0x3b, 0xe3, 0x8a, 0xad, 0x9c, 0x8a, + 0xd9, 0x09, 0x78, 0xfb, 0x17, 0x00, 0x00, 0xff, 0xff, 0xcd, 0x40, 0x4c, 0x73, 0x42, 0x02, 0x00, + 0x00, +} diff --git a/proto/generate.go b/proto/generate.go new file mode 100644 index 000000000..4cf477dca --- /dev/null +++ b/proto/generate.go @@ -0,0 +1,55 @@ +// Copyright (C) 2020 The Syncthing Authors. +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this file, +// You can obtain one at https://mozilla.org/MPL/2.0/. + +//+build ignore + +package main + +import ( + "log" + "os" + "os/exec" + "path/filepath" +) + +//go:generate go run scripts/protofmt.go . + +// First generate extensions using standard proto compiler. +//go:generate protoc -I ../ -I . --gogofast_out=Mgoogle/protobuf/descriptor.proto=github.com/gogo/protobuf/protoc-gen-gogo/descriptor,paths=source_relative:ext ext.proto + +// Then build our vanity compiler that uses the new extensions +//go:generate go build -o scripts/protoc-gen-gosyncthing scripts/protoc_plugin.go + +// Inception, go generate calls the script itself that then deals with generation. +// This is only done because go:generate does not support wildcards in paths. +//go:generate go run generate.go lib/config lib/fs + +// Use the standard compiler here. We can revisit this later, but we don't plan on exposing this via any APIs. +//go:generate protoc -I ../ -I . --gogofast_out=paths=source_relative:.. lib/protocol/bep.proto + +func main() { + for _, path := range os.Args[1:] { + matches, err := filepath.Glob(filepath.Join(path, "*proto")) + if err != nil { + log.Fatal(err) + } + log.Println(path, "returned:", matches) + args := []string{ + "-I", "..", + "-I", ".", + "--plugin=protoc-gen-gosyncthing=scripts/protoc-gen-gosyncthing", + "--gosyncthing_out=paths=source_relative:..", + } + args = append(args, matches...) + cmd := exec.Command("protoc", args...) + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + + if err := cmd.Run(); err != nil { + log.Fatal("Failed generating", path) + } + } +} diff --git a/proto/lib/config/authmode.proto b/proto/lib/config/authmode.proto new file mode 100644 index 000000000..c045385f6 --- /dev/null +++ b/proto/lib/config/authmode.proto @@ -0,0 +1,14 @@ +syntax = "proto3"; + +package config; + +import "repos/protobuf/gogoproto/gogo.proto"; + +import "ext.proto"; + +enum AuthMode { + option (gogoproto.goproto_enum_stringer) = false; + + AUTH_MODE_STATIC = 0; + AUTH_MODE_LDAP = 1 [(ext.enumgoname) = "AuthModeLDAP"]; +} diff --git a/proto/lib/config/blockpullorder.proto b/proto/lib/config/blockpullorder.proto new file mode 100644 index 000000000..124b54844 --- /dev/null +++ b/proto/lib/config/blockpullorder.proto @@ -0,0 +1,9 @@ +syntax = "proto3"; + +package config; + +enum BlockPullOrder { + BLOCK_PULL_ORDER_STANDARD = 0; + BLOCK_PULL_ORDER_RANDOM = 1; + BLOCK_PULL_ORDER_IN_ORDER = 2; +} diff --git a/proto/lib/config/config.proto b/proto/lib/config/config.proto new file mode 100644 index 000000000..3b4f526ce --- /dev/null +++ b/proto/lib/config/config.proto @@ -0,0 +1,23 @@ +syntax = "proto3"; + +package config; + +import "lib/config/folderconfiguration.proto"; +import "lib/config/deviceconfiguration.proto"; +import "lib/config/guiconfiguration.proto"; +import "lib/config/ldapconfiguration.proto"; +import "lib/config/optionsconfiguration.proto"; +import "lib/config/observed.proto"; + +import "ext.proto"; + +message Configuration { + int32 version = 1 [(ext.xml) = "version,attr"]; + repeated FolderConfiguration folders = 2; + repeated DeviceConfiguration devices = 3; + GUIConfiguration gui = 4 [(ext.goname) = "GUI"]; + LDAPConfiguration ldap = 5 [(ext.goname) = "LDAP"]; + OptionsConfiguration options = 6; + repeated ObservedDevice ignored_devices = 7 [(ext.json) = "remoteIgnoredDevices", (ext.xml) = "remoteIgnoredDevice"]; + repeated ObservedDevice pending_devices = 8; +} diff --git a/proto/lib/config/deviceconfiguration.proto b/proto/lib/config/deviceconfiguration.proto new file mode 100644 index 000000000..3494a413d --- /dev/null +++ b/proto/lib/config/deviceconfiguration.proto @@ -0,0 +1,27 @@ +syntax = "proto3"; + +package config; + +import "lib/protocol/bep.proto"; +import "lib/config/observed.proto"; + +import "ext.proto"; + +message DeviceConfiguration { + bytes device_id = 1 [(ext.goname) = "DeviceID", (ext.xml) = "id,attr", (ext.json) = "deviceID", (ext.device_id) = true]; + string name = 2 [(ext.xml) = "name,attr,omitempty"]; + repeated string addresses = 3 [(ext.xml) = "address,omitempty", (ext.default) = "dynamic"]; + protocol.Compression compression = 4 [(ext.xml) = "compression,attr"]; + string cert_name = 5 [(ext.xml) = "certName,attr,omitempty"]; + bool introducer = 6 [(ext.xml) = "introducer,attr"]; + bool skip_introduction_removals = 7 [(ext.xml) = "skipIntroductionRemovals,attr"]; + bytes introduced_by = 8 [(ext.xml) = "introducedBy,attr", (ext.device_id) = true]; + bool paused = 9; + repeated string allowed_networks = 10 [(ext.xml) = "allowedNetwork,omitempty"]; + bool auto_accept_folders = 11; + int32 max_send_kbps = 12; + int32 max_recv_kbps = 13; + repeated ObservedFolder ignored_folders = 14; + repeated ObservedFolder pending_folders = 15; + int32 max_request_kib = 16 [(ext.goname) = "MaxRequestKiB", (ext.xml) = "maxRequestKiB", (ext.json) = "maxRequestKiB"]; +} diff --git a/proto/lib/config/folderconfiguration.proto b/proto/lib/config/folderconfiguration.proto new file mode 100644 index 000000000..0b7093060 --- /dev/null +++ b/proto/lib/config/folderconfiguration.proto @@ -0,0 +1,61 @@ +syntax = "proto3"; + +package config; + +import "lib/config/foldertype.proto"; +import "lib/config/size.proto"; +import "lib/config/pullorder.proto"; +import "lib/config/versioningconfiguration.proto"; +import "lib/config/blockpullorder.proto"; + +import "lib/fs/types.proto"; +import "lib/fs/copyrangemethod.proto"; + +import "ext.proto"; + +message FolderDeviceConfiguration { + bytes device_id = 1 [(ext.goname) = "DeviceID", (ext.xml) = "id,attr", (ext.json) = "deviceID", (ext.device_id) = true]; + bytes introduced_by = 2 [(ext.xml) = "introducedBy,attr", (ext.device_id) = true]; +} + +message FolderConfiguration { + string id = 1 [(ext.goname) = "ID", (ext.xml) = "id,attr"]; + string label = 2 [(ext.xml) = "label,attr", (ext.restart) = false]; + fs.FilesystemType filesystem_type = 3; + string path = 4 [(ext.xml) = "path,attr"]; + FolderType type = 5 [(ext.xml) = "type,attr"]; + repeated FolderDeviceConfiguration devices = 6; + int32 rescan_interval_s = 7 [(ext.xml) = "rescanIntervalS,attr", (ext.default) = "3600"]; + bool fs_watcher_enabled = 8 [(ext.goname) = "FSWatcherEnabled", (ext.xml) = "fsWatcherEnabled,attr", (ext.default) = "true"]; + int32 fs_watcher_delay_s = 9 [(ext.goname) = "FSWatcherDelayS", (ext.xml) = "fsWatcherDelayS,attr", (ext.default) = "10"]; + bool ignore_perms = 10 [(ext.xml) = "ignorePerms,attr"]; + bool auto_normalize = 11 [(ext.xml) = "autoNormalize,attr", (ext.default) = "true"]; + Size min_disk_free = 12; + VersioningConfiguration versioning = 13; + int32 copiers = 14; + int32 puller_max_pending_kib = 15 [(ext.goname) = "PullerMaxPendingKiB", (ext.xml) = "pullerMaxPendingKiB", (ext.json) = "pullerMaxPendingKiB"]; + int32 hashers = 16; + PullOrder order = 17; + bool ignore_delete = 18; + int32 scan_progress_interval_s = 19; + int32 puller_pause_s = 20; + int32 max_conflicts = 21 [(ext.default) = "-1"]; + bool disable_sparse_files = 22; + bool disable_temp_indexes = 23; + bool paused = 24; + int32 weak_hash_threshold_pct = 25; + string marker_name = 26; + bool copy_ownership_from_parent = 27; + int32 mod_time_window_s = 28 [(ext.goname) = "RawModTimeWindowS"]; + int32 max_concurrent_writes = 29 [(ext.default) = "2"]; + bool disable_fsync = 30; + BlockPullOrder block_pull_order = 31; + fs.CopyRangeMethod copy_range_method = 32 [(ext.default) = "standard"]; + bool case_sensitive_fs = 33 [(ext.goname) = "CaseSensitiveFS", (ext.xml) = "caseSensitiveFS", (ext.json) = "caseSensitiveFS"]; + bool follow_junctions = 34 [(ext.goname) = "JunctionsAsDirs", (ext.xml) = "junctionsAsDirs", (ext.json) = "junctionsAsDirs"]; + + // Legacy deprecated + bool read_only = 9000 [deprecated=true, (ext.xml) = "ro,attr,omitempty"]; + double min_disk_free_pct = 9001 [deprecated=true]; + int32 pullers = 9002 [deprecated=true]; +} diff --git a/proto/lib/config/foldertype.proto b/proto/lib/config/foldertype.proto new file mode 100644 index 000000000..5ab498c31 --- /dev/null +++ b/proto/lib/config/foldertype.proto @@ -0,0 +1,9 @@ +syntax = "proto3"; + +package config; + +enum FolderType { + FOLDER_TYPE_SEND_RECEIVE = 0; + FOLDER_TYPE_SEND_ONLY = 1; + FOLDER_TYPE_RECEIVE_ONLY = 2; +} diff --git a/proto/lib/config/guiconfiguration.proto b/proto/lib/config/guiconfiguration.proto new file mode 100644 index 000000000..ed0927599 --- /dev/null +++ b/proto/lib/config/guiconfiguration.proto @@ -0,0 +1,23 @@ +syntax = "proto3"; + +package config; + +import "lib/config/authmode.proto"; + +import "ext.proto"; + +message GUIConfiguration { + bool enabled = 1 [(ext.xml) = "enabled,attr", (ext.default) = "true"]; + string address = 2 [(ext.goname) = "RawAddress", (ext.default) = "127.0.0.1:8384"]; + string unix_socket_permissions = 3 [(ext.goname) = "RawUnixSocketPermissions", (ext.xml) = "unixSocketPermissions,omitempty"]; + string user = 4 [(ext.xml) = "user,omitempty"]; + string password = 5 [(ext.xml) = "password,omitempty"]; + AuthMode auth_mode = 6 [(ext.xml) = "authMode,omitempty"]; + bool use_tls = 7 [(ext.goname) = "RawUseTLS", (ext.xml) = "tls,attr", (ext.json) = "useTLS"]; + string api_key = 8 [(ext.goname) = "APIKey", (ext.xml) = "apikey,omitempty"]; + bool insecure_admin_access = 9 [(ext.xml) = "insecureAdminAccess,omitempty"]; + string theme = 10 [(ext.default) = "default"]; + bool debugging = 11 [(ext.xml) = "debugging,attr"]; + bool insecure_skip_host_check = 12 [(ext.xml) = "insecureSkipHostcheck,omitempty", (ext.json) = "insecureSkipHostcheck"]; + bool insecure_allow_frame_loading = 13 [(ext.xml) = "insecureAllowFrameLoading,omitempty"]; +} diff --git a/proto/lib/config/ldapconfiguration.proto b/proto/lib/config/ldapconfiguration.proto new file mode 100644 index 000000000..6ad989662 --- /dev/null +++ b/proto/lib/config/ldapconfiguration.proto @@ -0,0 +1,17 @@ +syntax = "proto3"; + +package config; + +import "lib/config/ldaptransport.proto"; + +import "ext.proto"; + + +message LDAPConfiguration { + string address = 1 [(ext.xml) = "address,omitempty"]; + string bind_dn = 2 [(ext.goname) = "BindDN", (ext.xml) = "bindDN,omitempty", (ext.json) = "bindDN"]; + LDAPTransport transport = 3 [(ext.xml) = "transport,omitempty"]; + bool insecure_skip_verify = 4 [(ext.xml) = "insecureSkipVerify,omitempty", (ext.default) = "false"]; + string search_base_dn = 5 [(ext.goname) = "SearchBaseDN", (ext.xml) = "searchBaseDN,omitempty", (ext.json) = "searchBaseDN"]; + string search_filter = 6 [(ext.xml) = "searchFilter,omitempty"]; +} diff --git a/proto/lib/config/ldaptransport.proto b/proto/lib/config/ldaptransport.proto new file mode 100644 index 000000000..938f65e90 --- /dev/null +++ b/proto/lib/config/ldaptransport.proto @@ -0,0 +1,15 @@ +syntax = "proto3"; + +package config; + +import "repos/protobuf/gogoproto/gogo.proto"; + +import "ext.proto"; + +enum LDAPTransport { + option (gogoproto.goproto_enum_stringer) = false; + + LDAP_TRANSPORT_PLAIN = 0 [(ext.enumgoname) = "LDAPTransportPlain"]; + LDAP_TRANSPORT_TLS = 2 [(ext.enumgoname) = "LDAPTransportTLS"]; + LDAP_TRANSPORT_START_TLS = 3 [(ext.enumgoname) = "LDAPTransportStartTLS"]; +} diff --git a/proto/lib/config/observed.proto b/proto/lib/config/observed.proto new file mode 100644 index 000000000..a1b44bcf7 --- /dev/null +++ b/proto/lib/config/observed.proto @@ -0,0 +1,20 @@ +syntax = "proto3"; + +package config; + +import "google/protobuf/timestamp.proto"; + +import "ext.proto"; + +message ObservedFolder { + google.protobuf.Timestamp time = 1 [(ext.xml) = "time,attr"]; + string id = 2 [(ext.goname) = "ID", (ext.xml) = "id,attr"]; + string label = 3 [(ext.xml) = "label,attr"]; +} + +message ObservedDevice { + google.protobuf.Timestamp time = 1 [(ext.xml) = "time,attr"]; + bytes id = 2 [(ext.goname) = "ID", (ext.json) = "deviceID", (ext.xml) = "id,attr", (ext.device_id) = true]; + string name = 3 [(ext.xml) = "name,attr"]; + string address = 4 [(ext.xml) = "address,attr"]; +} diff --git a/proto/lib/config/optionsconfiguration.proto b/proto/lib/config/optionsconfiguration.proto new file mode 100644 index 000000000..dfed02241 --- /dev/null +++ b/proto/lib/config/optionsconfiguration.proto @@ -0,0 +1,66 @@ +syntax = "proto3"; + +package config; + +import "lib/config/tuning.proto"; +import "lib/config/size.proto"; + +import "ext.proto"; + +message OptionsConfiguration { + repeated string listen_addresses = 1 [(ext.goname) = "RawListenAddresses", (ext.default) = "default"]; + repeated string global_discovery_servers = 2 [(ext.goname) = "RawGlobalAnnServers", (ext.xml) = "globalAnnounceServer", (ext.json) = "globalAnnounceServers", (ext.default) = "default"]; + bool global_discovery_enabled = 3 [(ext.goname) = "GlobalAnnEnabled", (ext.xml) = "globalAnnounceEnabled", (ext.json) = "globalAnnounceEnabled", (ext.default) = "true"]; + bool local_discovery_enabled = 4 [(ext.goname) = "LocalAnnEnabled", (ext.xml) = "localAnnounceEnabled", (ext.json) = "localAnnounceEnabled", (ext.default) = "true"]; + int32 local_announce_port = 5 [(ext.goname) = "LocalAnnPort", (ext.xml) = "localAnnouncePort", (ext.json) = "localAnnouncePort", (ext.default) = "21027"]; + string local_announce_multicast_address = 6 [(ext.goname) = "LocalAnnMCAddr", (ext.xml) = "localAnnounceMCAddr", (ext.json) = "localAnnounceMCAddr", (ext.default) = "[ff12::8384]:21027"]; + int32 max_send_kbps = 7; + int32 max_recv_kbps = 8; + int32 reconnection_interval_s = 9 [(ext.goname) = "ReconnectIntervalS", (ext.default) = "60"]; + bool relays_enabled = 10 [(ext.default) = "true"]; + int32 relays_reconnect_interval_m = 11 [(ext.goname) = "RelayReconnectIntervalM", (ext.xml) = "relayReconnectIntervalM", (ext.json) = "relayReconnectIntervalM", (ext.default) = "10"]; + bool start_browser = 12 [(ext.default) = "true"]; + bool nat_traversal_enabled = 14 [(ext.goname) = "NATEnabled", (ext.xml) = "natEnabled", (ext.json) = "natEnabled", (ext.default) = "true"]; + int32 nat_traversal_lease_m = 15 [(ext.goname) = "NATLeaseM", (ext.xml) = "natLeaseMinutes", (ext.json) = "natLeaseMinutes", (ext.default) = "60"]; + int32 nat_traversal_renewal_m = 16 [(ext.goname) = "NATRenewalM", (ext.xml) = "natRenewalMinutes", (ext.json) = "natRenewalMinutes", (ext.default) = "30"]; + int32 nat_traversal_timeout_s = 17 [(ext.goname) = "NATTimeoutS", (ext.xml) = "natTimeoutSeconds", (ext.json) = "natTimeoutSeconds", (ext.default) = "10"]; + int32 usage_reporting_accepted = 18 [(ext.goname) = "URAccepted", (ext.xml) = "urAccepted", (ext.json) = "urAccepted"]; + int32 usage_reporting_seen = 19 [(ext.goname) = "URSeen", (ext.xml) = "urSeen", (ext.json) = "urSeen"]; + string usage_reporting_unique_id = 20 [(ext.goname) = "URUniqueID", (ext.xml) = "urUniqueID", (ext.json) = "urUniqueId"]; + string usage_reporting_url = 21 [(ext.goname) = "URURL", (ext.xml) = "urURL", (ext.json) = "urURL", (ext.default) = "https://data.syncthing.net/newdata"]; + bool usage_reporting_post_insecurely = 22 [(ext.goname) = "URPostInsecurely", (ext.xml) = "urPostInsecurely", (ext.json) = "urPostInsecurely", (ext.default) = "false"]; + int32 usage_reporting_initial_delay_s = 23 [(ext.goname) = "URInitialDelayS", (ext.xml) = "urInitialDelayS", (ext.json) = "urInitialDelayS", (ext.default) = "1800"]; + bool restart_on_wakeup = 24 [(ext.default) = "true"]; + int32 auto_upgrade_interval_h = 25 [(ext.default) = "12"]; + bool upgrade_to_pre_releases = 26; + int32 keep_temporaries_h = 27 [(ext.default) = "24"]; + bool cache_ignored_files = 28 [(ext.default) = "false"]; + int32 progress_update_interval_s = 29 [(ext.default) = "5"]; + bool limit_bandwidth_in_lan = 30 [(ext.default) = "false"]; + Size min_home_disk_free = 31 [(ext.default) = "1 %"]; + string releases_url = 32 [(ext.goname) = "ReleasesURL", (ext.xml) = "releasesURL", (ext.json) = "releasesURL", (ext.default) = "https://upgrades.syncthing.net/meta.json"]; + repeated string always_local_nets = 33; + bool overwrite_remote_device_names_on_connect = 34 [(ext.goname) = "OverwriteRemoteDevNames", (ext.default) = "false"]; + int32 temp_index_min_blocks = 35 [(ext.default) = "10"]; + repeated string unacked_notification_ids = 36 [(ext.goname) = "UnackedNotificationIDs", (ext.xml) = "unackedNotificationID", (ext.json) = "unackedNotificationIDs"]; + int32 traffic_class = 37; + string default_folder_path = 38 [(ext.default) = "~"]; + bool set_low_priority = 39 [(ext.default) = "true"]; + int32 max_folder_concurrency = 40 [(ext.goname) = "RawMaxFolderConcurrency"]; + string crash_reporting_url = 41 [(ext.goname) = "CRURL", (ext.xml) = "crashReportingURL", (ext.json) = "crURL", (ext.default) = "https://crash.syncthing.net/newcrash"]; + bool crash_reporting_enabled = 42 [(ext.goname) = "CREnabled", (ext.default) = "true"]; + int32 stun_keepalive_start_s = 43 [(ext.default) = "180"]; + int32 stun_keepalive_min_s = 44 [(ext.default) = "20"]; + repeated string stun_servers = 45 [(ext.goname) = "RawStunServers", (ext.default) = "default"]; + Tuning database_tuning = 46 [(ext.restart) = true]; + int32 max_concurrent_incoming_request_kib = 47 [(ext.goname) = "RawMaxCIRequestKiB", (ext.xml) = "maxConcurrentIncomingRequestKiB", (ext.json) = "maxConcurrentIncomingRequestKiB"]; + + // Legacy deprecated + bool upnp_enabled = 9000 [deprecated = true, (ext.goname) = "DeprecatedUPnPEnabled"]; + int32 upnp_lease_m = 9001 [deprecated = true, (ext.goname) = "DeprecatedUPnPLeaseM", (ext.xml) = "upnpLeaseMinutes,omitempty"]; + int32 upnp_renewal_m = 9002 [deprecated = true, (ext.goname) = "DeprecatedUPnPRenewalM", (ext.xml) = "upnpRenewalMinutes,omitempty"]; + int32 upnp_timeout_s = 9003 [deprecated = true, (ext.goname) = "DeprecatedUPnPTimeoutS", (ext.xml) = "upnpTimeoutSeconds,omitempty"]; + repeated string relay_servers = 9004 [deprecated = true]; + double min_home_disk_free_pct = 9005 [deprecated = true]; + int32 max_concurrent_scans = 9006 [deprecated = true]; +} diff --git a/proto/lib/config/pullorder.proto b/proto/lib/config/pullorder.proto new file mode 100644 index 000000000..b9afb8e0d --- /dev/null +++ b/proto/lib/config/pullorder.proto @@ -0,0 +1,16 @@ +syntax = "proto3"; + +package config; + +import "repos/protobuf/gogoproto/gogo.proto"; + +enum PullOrder { + option (gogoproto.goproto_enum_stringer) = false; + + PULL_ORDER_RANDOM = 0; + PULL_ORDER_ALPHABETIC = 1; + PULL_ORDER_SMALLEST_FIRST = 2; + PULL_ORDER_LARGEST_FIRST = 3; + PULL_ORDER_OLDEST_FIRST = 4; + PULL_ORDER_NEWEST_FIRST = 5; +} diff --git a/proto/lib/config/size.proto b/proto/lib/config/size.proto new file mode 100644 index 000000000..e1795ddb1 --- /dev/null +++ b/proto/lib/config/size.proto @@ -0,0 +1,14 @@ +syntax = "proto3"; + +package config; + +import "repos/protobuf/gogoproto/gogo.proto"; + +import "ext.proto"; + +message Size { + option (gogoproto.goproto_stringer) = false; + + double value = 1 [(ext.xml) = ",chardata"]; + string unit = 2 [(ext.xml) = "unit,attr"]; +} diff --git a/proto/lib/config/tuning.proto b/proto/lib/config/tuning.proto new file mode 100644 index 000000000..edbbf3193 --- /dev/null +++ b/proto/lib/config/tuning.proto @@ -0,0 +1,13 @@ +syntax = "proto3"; + +package config; + +import "repos/protobuf/gogoproto/gogo.proto"; + +enum Tuning { + option (gogoproto.goproto_enum_stringer) = false; + + TUNING_AUTO = 0; + TUNING_SMALL = 1; + TUNING_LARGE = 2; +} diff --git a/proto/lib/config/versioningconfiguration.proto b/proto/lib/config/versioningconfiguration.proto new file mode 100644 index 000000000..1aab2fb18 --- /dev/null +++ b/proto/lib/config/versioningconfiguration.proto @@ -0,0 +1,14 @@ +syntax = "proto3"; + +package config; + +import "ext.proto"; + +// VersioningConfiguration is used in the code and for JSON serialization +message VersioningConfiguration { + option (ext.xml_tags) = false; + + string type = 1; + map parameters = 2 [(ext.goname) = "Params", (ext.json) = "params"]; + int32 cleanup_interval_s = 3 [(ext.default) = "3600"]; +} diff --git a/proto/lib/fs/copyrangemethod.proto b/proto/lib/fs/copyrangemethod.proto new file mode 100644 index 000000000..5adaed385 --- /dev/null +++ b/proto/lib/fs/copyrangemethod.proto @@ -0,0 +1,12 @@ +syntax = "proto3"; + +package fs; + +enum CopyRangeMethod { + COPY_RANGE_METHOD_STANDARD = 0; + COPY_RANGE_METHOD_IOCTL = 1; + COPY_RANGE_METHOD_COPY_FILE_RANGE = 2; + COPY_RANGE_METHOD_SEND_FILE = 3; + COPY_RANGE_METHOD_DUPLICATE_EXTENTS = 4; + COPY_RANGE_METHOD_ALL_WITH_FALLBACK = 5; +} diff --git a/proto/lib/fs/types.proto b/proto/lib/fs/types.proto new file mode 100644 index 000000000..994ac123f --- /dev/null +++ b/proto/lib/fs/types.proto @@ -0,0 +1,8 @@ +syntax = "proto3"; + +package fs; + +enum FilesystemType { + FILESYSTEM_TYPE_BASIC = 0; + FILESYSTEM_TYPE_FAKE = 1; +} diff --git a/lib/protocol/bep.proto b/proto/lib/protocol/bep.proto similarity index 100% rename from lib/protocol/bep.proto rename to proto/lib/protocol/bep.proto diff --git a/proto/scripts/dump_tags.go b/proto/scripts/dump_tags.go new file mode 100644 index 000000000..71d089d4f --- /dev/null +++ b/proto/scripts/dump_tags.go @@ -0,0 +1,68 @@ +// Copyright (C) 2020 The Syncthing Authors. +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this file, +// You can obtain one at https://mozilla.org/MPL/2.0/. + +//+build ignore + +package main + +import ( + "encoding/csv" + "fmt" + "os" + "path/filepath" + "reflect" + "strings" + + "github.com/syncthing/syncthing/lib/config" +) + +func main() { + new, err := os.Create("tags.csv") + if err != nil { + panic(err) + } + fmt.Println(filepath.Abs(new.Name())) + w := csv.NewWriter(new) + w.Write([]string{ + "path", "json", "xml", "default", "restart", + }) + walk(w, "", &config.Configuration{}) + w.Flush() + new.Close() +} + +func walk(w *csv.Writer, prefix string, data interface{}) { + s := reflect.ValueOf(data).Elem() + t := s.Type() + for i := 0; i < s.NumField(); i++ { + f := s.Field(i) + ft := t.Field(i) + + for f.Kind() == reflect.Ptr { + f = f.Elem() + } + + pfx := prefix + "." + s.Type().Field(i).Name + if f.Kind() == reflect.Slice { + slc := reflect.MakeSlice(f.Type(), 1, 1) + f = slc.Index(0) + pfx = prefix + "." + s.Type().Field(i).Name + "[]" + } + + if f.Kind() == reflect.Struct && strings.HasPrefix(f.Type().PkgPath(), "github.com/syncthing/syncthing") { + walk(w, pfx, f.Addr().Interface()) + } else { + jsonTag := ft.Tag.Get("json") + xmlTag := ft.Tag.Get("xml") + defaultTag := ft.Tag.Get("default") + restartTag := ft.Tag.Get("restart") + w.Write([]string{ + strings.ToLower(pfx), jsonTag, xmlTag, defaultTag, restartTag, + }) + } + } + +} diff --git a/proto/scripts/protoc_plugin.go b/proto/scripts/protoc_plugin.go new file mode 100644 index 000000000..29565c169 --- /dev/null +++ b/proto/scripts/protoc_plugin.go @@ -0,0 +1,291 @@ +// Copyright (C) 2020 The Syncthing Authors. +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this file, +// You can obtain one at https://mozilla.org/MPL/2.0/. + +//+build ignore + +package main + +import ( + "fmt" + "path/filepath" + "strings" + "unicode" + + "github.com/syncthing/syncthing/proto/ext" + + "github.com/gogo/protobuf/gogoproto" + "github.com/gogo/protobuf/proto" + "github.com/gogo/protobuf/protoc-gen-gogo/descriptor" + "github.com/gogo/protobuf/vanity" + "github.com/gogo/protobuf/vanity/command" +) + +func main() { + req := command.Read() + files := req.GetProtoFile() + files = vanity.FilterFiles(files, vanity.NotGoogleProtobufDescriptorProto) + + vanity.ForEachFile(files, vanity.TurnOffGoGettersAll) + vanity.ForEachFile(files, TurnOnProtoSizerAll) + vanity.ForEachFile(files, vanity.TurnOffGoEnumPrefixAll) + vanity.ForEachFile(files, vanity.TurnOffGoUnrecognizedAll) + vanity.ForEachFile(files, vanity.TurnOffGoUnkeyedAll) + vanity.ForEachFile(files, vanity.TurnOffGoSizecacheAll) + vanity.ForEachFile(files, vanity.TurnOffGoEnumStringerAll) + vanity.ForEachEnumInFiles(files, HandleCustomEnumExtensions) + vanity.ForEachFile(files, SetPackagePrefix("github.com/syncthing/syncthing")) + + vanity.ForEachMessageInFiles(files, HandleCustomExtensions) + vanity.ForEachFieldInFilesExcludingExtensions(files, TurnOffNullableForMessages) + + resp := command.Generate(req) + command.Write(resp) +} + +func TurnOnProtoSizerAll(file *descriptor.FileDescriptorProto) { + vanity.SetBoolFileOption(gogoproto.E_ProtosizerAll, true)(file) +} + +func TurnOffNullableForMessages(field *descriptor.FieldDescriptorProto) { + if !vanity.FieldHasBoolExtension(field, gogoproto.E_Nullable) { + _, hasCustomType := GetFieldStringExtension(field, gogoproto.E_Customtype) + if field.IsMessage() || hasCustomType { + vanity.SetBoolFieldOption(gogoproto.E_Nullable, false)(field) + } + } +} + +func HandleCustomEnumExtensions(enum *descriptor.EnumDescriptorProto) { + for _, field := range enum.Value { + if field == nil { + continue + } + if field.Options == nil { + field.Options = &descriptor.EnumValueOptions{} + } + customName := gogoproto.GetEnumValueCustomName(field) + if customName != "" { + continue + } + if v, ok := GetEnumValueStringExtension(field, ext.E_Enumgoname); ok { + SetEnumValueStringFieldOption(field, gogoproto.E_EnumvalueCustomname, v) + } else { + SetEnumValueStringFieldOption(field, gogoproto.E_EnumvalueCustomname, toCamelCase(*field.Name, true)) + } + + } +} + +func SetPackagePrefix(prefix string) func(file *descriptor.FileDescriptorProto) { + return func(file *descriptor.FileDescriptorProto) { + if file.Options.GoPackage == nil { + pkg, _ := filepath.Split(file.GetName()) + fullPkg := prefix + "/" + strings.TrimSuffix(pkg, "/") + file.Options.GoPackage = &fullPkg + } + } +} + +func toCamelCase(input string, firstUpper bool) string { + runes := []rune(strings.ToLower(input)) + outputRunes := make([]rune, 0, len(runes)) + + nextUpper := false + for i, rune := range runes { + if rune == '_' { + nextUpper = true + continue + } + if (firstUpper && i == 0) || nextUpper { + rune = unicode.ToUpper(rune) + nextUpper = false + } + outputRunes = append(outputRunes, rune) + } + return string(outputRunes) +} + +func SetStringFieldOption(field *descriptor.FieldDescriptorProto, extension *proto.ExtensionDesc, value string) { + if _, ok := GetFieldStringExtension(field, extension); ok { + return + } + if field.Options == nil { + field.Options = &descriptor.FieldOptions{} + } + if err := proto.SetExtension(field.Options, extension, &value); err != nil { + panic(err) + } +} + +func SetEnumValueStringFieldOption(field *descriptor.EnumValueDescriptorProto, extension *proto.ExtensionDesc, value string) { + if _, ok := GetEnumValueStringExtension(field, extension); ok { + return + } + if field.Options == nil { + field.Options = &descriptor.EnumValueOptions{} + } + if err := proto.SetExtension(field.Options, extension, &value); err != nil { + panic(err) + } +} + +func GetEnumValueStringExtension(enumValue *descriptor.EnumValueDescriptorProto, extension *proto.ExtensionDesc) (string, bool) { + if enumValue.Options == nil { + return "", false + } + value, err := proto.GetExtension(enumValue.Options, extension) + if err != nil { + return "", false + } + if value == nil { + return "", false + } + if v, ok := value.(*string); !ok || v == nil { + return "", false + } else { + return *v, true + } +} + +func GetFieldStringExtension(field *descriptor.FieldDescriptorProto, extension *proto.ExtensionDesc) (string, bool) { + if field.Options == nil { + return "", false + } + value, err := proto.GetExtension(field.Options, extension) + if err != nil { + return "", false + } + if value == nil { + return "", false + } + if v, ok := value.(*string); !ok || v == nil { + return "", false + } else { + return *v, true + } +} + +func GetFieldBooleanExtension(field *descriptor.FieldDescriptorProto, extension *proto.ExtensionDesc) (bool, bool) { + if field.Options == nil { + return false, false + } + value, err := proto.GetExtension(field.Options, extension) + if err != nil { + return false, false + } + if value == nil { + return false, false + } + if v, ok := value.(*bool); !ok || v == nil { + return false, false + } else { + return *v, true + } +} + +func GetMessageBoolExtension(msg *descriptor.DescriptorProto, extension *proto.ExtensionDesc) (bool, bool) { + if msg.Options == nil { + return false, false + } + value, err := proto.GetExtension(msg.Options, extension) + if err != nil { + return false, false + } + if value == nil { + return false, false + } + val, ok := value.(*bool) + if !ok || val == nil { + return false, false + } + return *val, true +} + +func HandleCustomExtensions(msg *descriptor.DescriptorProto) { + generateXmlTags := true + if generate, ok := GetMessageBoolExtension(msg, ext.E_XmlTags); ok { + generateXmlTags = generate + } + + vanity.ForEachField([]*descriptor.DescriptorProto{msg}, func(field *descriptor.FieldDescriptorProto) { + if field.Options == nil { + field.Options = &descriptor.FieldOptions{} + } + deprecated := field.Options.Deprecated != nil && *field.Options.Deprecated == true + + if field.Type != nil && *field.Type == descriptor.FieldDescriptorProto_TYPE_INT32 { + SetStringFieldOption(field, gogoproto.E_Casttype, "int") + } + + if field.TypeName != nil && *field.TypeName == ".google.protobuf.Timestamp" { + vanity.SetBoolFieldOption(gogoproto.E_Stdtime, true)(field) + } + + if goName, ok := GetFieldStringExtension(field, ext.E_Goname); ok { + SetStringFieldOption(field, gogoproto.E_Customname, goName) + } else if deprecated { + SetStringFieldOption(field, gogoproto.E_Customname, "Deprecated"+toCamelCase(*field.Name, true)) + } + + if val, ok := GetFieldBooleanExtension(field, ext.E_DeviceId); ok && val { + SetStringFieldOption(field, gogoproto.E_Customtype, "github.com/syncthing/syncthing/lib/protocol.DeviceID") + } + + if jsonValue, ok := GetFieldStringExtension(field, ext.E_Json); ok { + SetStringFieldOption(field, gogoproto.E_Jsontag, jsonValue) + } else if deprecated { + SetStringFieldOption(field, gogoproto.E_Jsontag, "-") + } else { + SetStringFieldOption(field, gogoproto.E_Jsontag, toCamelCase(*field.Name, false)) + } + + current := "" + if v, ok := GetFieldStringExtension(field, gogoproto.E_Moretags); ok { + current = v + } + + if generateXmlTags { + if len(current) > 0 { + current += " " + } + if xmlValue, ok := GetFieldStringExtension(field, ext.E_Xml); ok { + current += fmt.Sprintf(`xml:"%s"`, xmlValue) + } else { + xmlValue = toCamelCase(*field.Name, false) + // XML dictates element name within the collection, not collection name, so trim plural suffix. + if field.IsRepeated() { + if strings.HasSuffix(xmlValue, "ses") { + // addresses -> address + xmlValue = strings.TrimSuffix(xmlValue, "es") + } else { + // devices -> device + xmlValue = strings.TrimSuffix(xmlValue, "s") + } + } + if deprecated { + xmlValue += ",omitempty" + } + current += fmt.Sprintf(`xml:"%s"`, xmlValue) + } + } + + if defaultValue, ok := GetFieldStringExtension(field, ext.E_Default); ok { + if len(current) > 0 { + current += " " + } + current += fmt.Sprintf(`default:"%s"`, defaultValue) + } + + if restartValue, ok := GetFieldBooleanExtension(field, ext.E_Restart); ok { + if len(current) > 0 { + current += " " + } + current += fmt.Sprintf(`restart:"%t"`, restartValue) + } + + SetStringFieldOption(field, gogoproto.E_Moretags, current) + }) +} diff --git a/script/protofmt.go b/proto/scripts/protofmt.go similarity index 66% rename from script/protofmt.go rename to proto/scripts/protofmt.go index 5a203d20e..2f0ae69d5 100644 --- a/script/protofmt.go +++ b/proto/scripts/protofmt.go @@ -15,6 +15,7 @@ import ( "io" "log" "os" + "path/filepath" "regexp" "strings" "text/tabwriter" @@ -22,24 +23,54 @@ import ( func main() { flag.Parse() - file := flag.Arg(0) + for _, arg := range flag.Args() { + matches, err := filepath.Glob(arg) + if err != nil { + log.Fatal(err) + } + for _, file := range matches { + if stat, err := os.Stat(file); err != nil { + log.Fatal(err) + } else if stat.IsDir() { + err := filepath.Walk(file, func(path string, info os.FileInfo, err error) error { + if err != nil { + return err + } + if filepath.Ext(path) == ".proto" { + return formatProtoFile(path) + } + return nil + }) + if err != nil { + log.Fatal(err) + } + } else { + if err := formatProtoFile(file); err != nil { + log.Fatal(err) + } + } + } + } +} + +func formatProtoFile(file string) error { + log.Println("Formatting", file) in, err := os.Open(file) if err != nil { - log.Fatal(err) + return err } + defer in.Close() out, err := os.Create(file + ".tmp") if err != nil { - log.Fatal(err) + return err } - + defer out.Close() if err := formatProto(in, out); err != nil { - log.Fatal(err) + return err } in.Close() out.Close() - if err := os.Rename(file+".tmp", file); err != nil { - log.Fatal(err) - } + return os.Rename(file+".tmp", file) } func formatProto(in io.Reader, out io.Writer) error {