diff --git a/p2p/host/basic/basic_host_test.go b/p2p/host/basic/basic_host_test.go index 0c7dea29fefd06ebd022420c983266cb143c2bdc..caf2d8f7bcd0b12442fc70e2ed34ac1174d30afa 100644 --- a/p2p/host/basic/basic_host_test.go +++ b/p2p/host/basic/basic_host_test.go @@ -241,3 +241,62 @@ func TestNewDialOld(t *testing.T) { s.Close() } + +func TestProtoDowngrade(t *testing.T) { + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + h1, h2 := getHostPair(ctx, t) + defer h1.Close() + defer h2.Close() + + connectedOn := make(chan protocol.ID, 16) + h1.SetStreamHandler("/testing/1.0.0", func(s inet.Stream) { + connectedOn <- s.Protocol() + s.Close() + }) + + s, err := h2.NewStream(ctx, h1.ID(), "/testing/1.0.0", "/testing") + if err != nil { + t.Fatal(err) + } + + assertWait(t, connectedOn, "/testing/1.0.0") + + if s.Protocol() != "/testing/1.0.0" { + t.Fatal("shoould have gotten /testing") + } + s.Close() + + h1.Network().ConnsToPeer(h2.ID())[0].Close() + + time.Sleep(time.Millisecond * 50) // allow notifications to propogate + h1.RemoveStreamHandler("/testing/1.0.0") + h1.SetStreamHandler("/testing", func(s inet.Stream) { + connectedOn <- s.Protocol() + s.Close() + }) + + h2pi := h2.Peerstore().PeerInfo(h2.ID()) + if err := h1.Connect(ctx, h2pi); err != nil { + t.Fatal(err) + } + + s2, err := h2.NewStream(ctx, h1.ID(), "/testing/1.0.0", "/testing") + if err != nil { + t.Fatal(err) + } + + _, err = s2.Write(nil) + if err != nil { + t.Fatal(err) + } + + assertWait(t, connectedOn, "/testing") + + if s2.Protocol() != "/testing" { + t.Fatal("shoould have gotten /testing") + } + s2.Close() + +} diff --git a/p2p/protocol/identify/id.go b/p2p/protocol/identify/id.go index 67bacfd2aa56e1a3ea3f2eeebbaa56d60f6e61b8..ebd00248690eae2e5d373c95674cdb860ba8ba07 100644 --- a/p2p/protocol/identify/id.go +++ b/p2p/protocol/identify/id.go @@ -193,7 +193,7 @@ func (ids *IDService) consumeMessage(mes *pb.Identify, c inet.Conn) { p := c.RemotePeer() // mes.Protocols - ids.Host.Peerstore().AddProtocols(p, mes.Protocols...) + ids.Host.Peerstore().SetProtocols(p, mes.Protocols...) // mes.ObservedAddr ids.consumeObservedAddress(mes.GetObservedAddr(), c) diff --git a/package.json b/package.json index 468ac2e164bd2f3c2b216cacfd6847b069c6ea5b..43195adad7a19939afb3d99b1add22c23b74344c 100644 --- a/package.json +++ b/package.json @@ -139,9 +139,9 @@ }, { "author": "whyrusleeping", - "hash": "QmXXCcQ7CLg5a81Ui9TTR35QcR4y7ZyihxwfjqaHfUVcVo", + "hash": "QmeXj9VAjmYQZxpmVz7VzccbJrpmr8qkCDSjfVNsPTWTYU", "name": "go-libp2p-peerstore", - "version": "1.3.0" + "version": "1.4.0" }, { "author": "whyrusleeping", @@ -193,15 +193,15 @@ }, { "author": "whyrusleeping", - "hash": "QmU3pGGVT1riXp5dBJbNrGpxssVScfvk9236drRHZZbKJ1", + "hash": "QmQx1dHDDYENugYgqA22BaBrRfuv1coSsuPiM7rYh1wwGH", "name": "go-libp2p-net", - "version": "1.6.0" + "version": "1.6.1" }, { "author": "whyrusleeping", - "hash": "QmX4j1JhubdEt4EB1JY1mMKTvJwPZSRzTv3uwh5zaDqyAi", + "hash": "QmY2otvyPM2sTaDsczo7Yuosg98sUMCJ9qx1gpPaAPTS9B", "name": "go-libp2p-metrics", - "version": "1.6.0" + "version": "1.6.1" }, { "author": "whyrusleeping", @@ -211,15 +211,15 @@ }, { "author": "whyrusleeping", - "hash": "Qmb6UFbVu1grhv5o5KnouvtZ6cqdrjXj6zLejAHWunxgCt", + "hash": "QmPTGbC34bPKaUm9wTxBo7zSCac7pDuG42ZmnXC718CKZZ", "name": "go-libp2p-host", - "version": "1.3.0" + "version": "1.3.1" }, { "author": "whyrusleeping", - "hash": "QmNafAGBU21iQmLudMT2z1kqgEGhjUrNoK9a3v4azd8ei4", + "hash": "QmV82zccDVU2fPv7E6wBD6cPy55brSFGHNeTVg5MZ6ZDQ8", "name": "go-libp2p-swarm", - "version": "1.5.0" + "version": "1.5.1" }, { "author": "whyrusleeping", @@ -229,15 +229,15 @@ }, { "author": "whyrusleeping", - "hash": "QmcDTquYLTYirqj71RRWKUWEEw3nJt11Awzun5ep8kfY7W", + "hash": "QmbUDXBMqSe4VCRgTMeAfyBh1T3GBnELEBXobZDL7cjVgs", "name": "go-libp2p-netutil", - "version": "0.1.0" + "version": "0.1.1" }, { "author": "whyrusleeping", - "hash": "QmYjDhB1VkuP5ATkqjdnPHfA2huyfcydNMXoGdtEvTNcYL", + "hash": "QmSzhYTPRvh5nUJnRfYBW52QGX6jekULCRQcrxRs8hmzj4", "name": "go-libp2p-blankhost", - "version": "0.1.0" + "version": "0.1.1" } ], "gxVersion": "0.4.0",