2
0
mirror of synced 2025-02-24 14:48:27 +00:00

The "m" field in the extended handshake is not mandatory

This commit is contained in:
Matt Joiner 2017-11-08 19:29:55 +11:00
parent 2f8a2ada2e
commit 1b9606ae75

View File

@ -892,32 +892,29 @@ func (c *connection) mainReadLoop() error {
if v, ok := d["v"]; ok { if v, ok := d["v"]; ok {
c.PeerClientName = v.(string) c.PeerClientName = v.(string)
} }
m, ok := d["m"] if m, ok := d["m"]; ok {
if !ok { mTyped, ok := m.(map[string]interface{})
err = errors.New("handshake missing m item")
break
}
mTyped, ok := m.(map[string]interface{})
if !ok {
err = errors.New("handshake m value is not dict")
break
}
if c.PeerExtensionIDs == nil {
c.PeerExtensionIDs = make(map[string]byte, len(mTyped))
}
for name, v := range mTyped {
id, ok := v.(int64)
if !ok { if !ok {
log.Printf("bad handshake m item extension ID type: %T", v) err = errors.New("handshake m value is not dict")
continue break
} }
if id == 0 { if c.PeerExtensionIDs == nil {
delete(c.PeerExtensionIDs, name) c.PeerExtensionIDs = make(map[string]byte, len(mTyped))
} else { }
if c.PeerExtensionIDs[name] == 0 { for name, v := range mTyped {
supportedExtensionMessages.Add(name, 1) id, ok := v.(int64)
if !ok {
log.Printf("bad handshake m item extension ID type: %T", v)
continue
}
if id == 0 {
delete(c.PeerExtensionIDs, name)
} else {
if c.PeerExtensionIDs[name] == 0 {
supportedExtensionMessages.Add(name, 1)
}
c.PeerExtensionIDs[name] = byte(id)
} }
c.PeerExtensionIDs[name] = byte(id)
} }
} }
metadata_sizeUntyped, ok := d["metadata_size"] metadata_sizeUntyped, ok := d["metadata_size"]