diff --git a/lib/model/model.go b/lib/model/model.go index a62ba2a3..7385cc78 100644 --- a/lib/model/model.go +++ b/lib/model/model.go @@ -584,6 +584,7 @@ func (m *Model) ClusterConfig(deviceID protocol.DeviceID, cm protocol.ClusterCon event := map[string]string{ "id": deviceID.String(), + "deviceName": cm.DeviceName, "clientName": cm.ClientName, "clientVersion": cm.ClientVersion, } @@ -600,18 +601,15 @@ func (m *Model) ClusterConfig(deviceID protocol.DeviceID, cm protocol.ClusterCon events.Default.Log(events.DeviceConnected, event) - l.Infof(`Device %s client is "%s %s"`, deviceID, cm.ClientName, cm.ClientVersion) + l.Infof(`Device %s client is "%s %s named %s"`, deviceID, cm.ClientName, cm.ClientVersion, cm.DeviceName) var changed bool - if name := cm.GetOption("name"); name != "" { - l.Infof("Device %s name is %q", deviceID, name) - device, ok := m.cfg.Devices()[deviceID] - if ok && device.Name == "" { - device.Name = name - m.cfg.SetDevice(device) - changed = true - } + device, ok := m.cfg.Devices()[deviceID] + if ok && device.Name == "" { + device.Name = cm.DeviceName + m.cfg.SetDevice(device) + changed = true } if m.cfg.Devices()[deviceID].Introducer { @@ -1465,14 +1463,9 @@ func (m *Model) numHashers(folder string) int { // clusterConfig returns a ClusterConfigMessage that is correct for the given peer device func (m *Model) clusterConfig(device protocol.DeviceID) protocol.ClusterConfigMessage { cm := protocol.ClusterConfigMessage{ + DeviceName: m.deviceName, ClientName: m.clientName, ClientVersion: m.clientVersion, - Options: []protocol.Option{ - { - Key: "name", - Value: m.deviceName, - }, - }, } m.fmut.RLock() diff --git a/lib/protocol/message.go b/lib/protocol/message.go index d47cb3b3..44870573 100644 --- a/lib/protocol/message.go +++ b/lib/protocol/message.go @@ -110,6 +110,7 @@ type ResponseMessage struct { } type ClusterConfigMessage struct { + DeviceName string // max:64 ClientName string // max:64 ClientVersion string // max:64 Folders []Folder // max:1000000 diff --git a/lib/protocol/message_xdr.go b/lib/protocol/message_xdr.go index 81165f53..58d84ce4 100644 --- a/lib/protocol/message_xdr.go +++ b/lib/protocol/message_xdr.go @@ -557,6 +557,12 @@ ClusterConfigMessage Structure: 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +| Length of Device Name | ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +/ / +\ Device Name (variable length) \ +/ / ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Length of Client Name | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ / / @@ -584,6 +590,7 @@ ClusterConfigMessage Structure: struct ClusterConfigMessage { + string DeviceName<64>; string ClientName<64>; string ClientVersion<64>; Folder Folders<1000000>; @@ -617,6 +624,10 @@ func (o ClusterConfigMessage) AppendXDR(bs []byte) ([]byte, error) { } func (o ClusterConfigMessage) EncodeXDRInto(xw *xdr.Writer) (int, error) { + if l := len(o.DeviceName); l > 64 { + return xw.Tot(), xdr.ElementSizeExceeded("DeviceName", l, 64) + } + xw.WriteString(o.DeviceName) if l := len(o.ClientName); l > 64 { return xw.Tot(), xdr.ElementSizeExceeded("ClientName", l, 64) } @@ -660,6 +671,7 @@ func (o *ClusterConfigMessage) UnmarshalXDR(bs []byte) error { } func (o *ClusterConfigMessage) DecodeXDRFrom(xr *xdr.Reader) error { + o.DeviceName = xr.ReadStringMax(64) o.ClientName = xr.ReadStringMax(64) o.ClientVersion = xr.ReadStringMax(64) _FoldersSize := int(xr.ReadUint32())