mirror of
https://github.com/cwinfo/yggdrasil-go.git
synced 2024-11-09 16:20:26 +00:00
add metric to metadata exchange, but currently left at default 0 value
This commit is contained in:
parent
6bc2044ced
commit
58af92812e
@ -158,6 +158,8 @@ func (intf *link) handler() (chan struct{}, error) {
|
|||||||
defer intf.conn.Close()
|
defer intf.conn.Close()
|
||||||
meta := version_getBaseMetadata()
|
meta := version_getBaseMetadata()
|
||||||
meta.key = intf.links.core.public
|
meta.key = intf.links.core.public
|
||||||
|
// TODO set meta.metric
|
||||||
|
metric := uint64(meta.metric)
|
||||||
metaBytes := meta.encode()
|
metaBytes := meta.encode()
|
||||||
// TODO timeouts on send/recv (goroutine for send/recv, channel select w/ timer)
|
// TODO timeouts on send/recv (goroutine for send/recv, channel select w/ timer)
|
||||||
var err error
|
var err error
|
||||||
@ -190,6 +192,9 @@ func (intf *link) handler() (chan struct{}, error) {
|
|||||||
if !meta.decode(metaBytes) {
|
if !meta.decode(metaBytes) {
|
||||||
return nil, errors.New("failed to decode metadata")
|
return nil, errors.New("failed to decode metadata")
|
||||||
}
|
}
|
||||||
|
if metric < uint64(meta.metric) {
|
||||||
|
metric = uint64(meta.metric)
|
||||||
|
}
|
||||||
if !meta.check() {
|
if !meta.check() {
|
||||||
intf.links.core.log.Errorf("Failed to connect to node: %s is incompatible version (local %s, remote %s)",
|
intf.links.core.log.Errorf("Failed to connect to node: %s is incompatible version (local %s, remote %s)",
|
||||||
intf.lname,
|
intf.lname,
|
||||||
@ -250,7 +255,6 @@ func (intf *link) handler() (chan struct{}, error) {
|
|||||||
intf.links.core.log.Infof("Connected %s: %s, source %s",
|
intf.links.core.log.Infof("Connected %s: %s, source %s",
|
||||||
strings.ToUpper(intf.info.linkType), themString, intf.info.local)
|
strings.ToUpper(intf.info.linkType), themString, intf.info.local)
|
||||||
// Run the handler
|
// Run the handler
|
||||||
var metric uint64 // TODO exchange metric in matadata, use max value
|
|
||||||
err = intf.links.core.PacketConn.HandleConn(ed25519.PublicKey(intf.info.key[:]), intf.conn, metric)
|
err = intf.links.core.PacketConn.HandleConn(ed25519.PublicKey(intf.info.key[:]), intf.conn, metric)
|
||||||
// TODO don't report an error if it's just a 'use of closed network connection'
|
// TODO don't report an error if it's just a 'use of closed network connection'
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -14,6 +14,7 @@ type version_metadata struct {
|
|||||||
ver uint8 // 1 byte in this version
|
ver uint8 // 1 byte in this version
|
||||||
// Everything after this point potentially depends on the version number, and is subject to change in future versions
|
// Everything after this point potentially depends on the version number, and is subject to change in future versions
|
||||||
minorVer uint8 // 1 byte in this version
|
minorVer uint8 // 1 byte in this version
|
||||||
|
metric uint8 // 1 byte in this version
|
||||||
key ed25519.PublicKey
|
key ed25519.PublicKey
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -31,6 +32,7 @@ func version_getMetaLength() (mlen int) {
|
|||||||
mlen += 4 // meta
|
mlen += 4 // meta
|
||||||
mlen++ // ver, as long as it's < 127, which it is in this version
|
mlen++ // ver, as long as it's < 127, which it is in this version
|
||||||
mlen++ // minorVer, as long as it's < 127, which it is in this version
|
mlen++ // minorVer, as long as it's < 127, which it is in this version
|
||||||
|
mlen++ // metric
|
||||||
mlen += ed25519.PublicKeySize // key
|
mlen += ed25519.PublicKeySize // key
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -41,6 +43,7 @@ func (m *version_metadata) encode() []byte {
|
|||||||
bs = append(bs, m.meta[:]...)
|
bs = append(bs, m.meta[:]...)
|
||||||
bs = append(bs, m.ver)
|
bs = append(bs, m.ver)
|
||||||
bs = append(bs, m.minorVer)
|
bs = append(bs, m.minorVer)
|
||||||
|
bs = append(bs, m.metric)
|
||||||
bs = append(bs, m.key[:]...)
|
bs = append(bs, m.key[:]...)
|
||||||
if len(bs) != version_getMetaLength() {
|
if len(bs) != version_getMetaLength() {
|
||||||
panic("Inconsistent metadata length")
|
panic("Inconsistent metadata length")
|
||||||
@ -57,6 +60,7 @@ func (m *version_metadata) decode(bs []byte) bool {
|
|||||||
offset += copy(m.meta[:], bs[offset:])
|
offset += copy(m.meta[:], bs[offset:])
|
||||||
m.ver, offset = bs[offset], offset+1
|
m.ver, offset = bs[offset], offset+1
|
||||||
m.minorVer, offset = bs[offset], offset+1
|
m.minorVer, offset = bs[offset], offset+1
|
||||||
|
m.metric, offset = bs[offset], offset+1
|
||||||
m.key = append([]byte(nil), bs[offset:]...)
|
m.key = append([]byte(nil), bs[offset:]...)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user