Example #1
0
        public void RequestHandler(INetworkStream stream)
        {
            using (stream)
            {
                // wrap reporter

                var message = new IdentifyContract
                {
                    Protocols       = Host.Mux.Protocols,
                    ObservedAddress = stream.Connection.RemoteMultiaddress.ToBytes(),
                    ListenAddresses = Host.Addresses.Select(laddr => laddr.ToBytes()).ToArray(),
                    ProtocolVersion = LibP2PVersion,
                    AgentVersion    = ClientVersion
                };
                var ownKey = Host.Peerstore.PublicKey(Host.Id);
                if (ownKey == null)
                {
                    Debug.WriteLine("Did not have own public key in Peerstore");
                }
                else
                {
                    message.PublicKey = ownKey.Bytes;
                }

                Serializer.SerializeWithLengthPrefix(((IWriter)stream).AsSystemStream(), message, PrefixStyle.Fixed32BigEndian);
            }
        }
Example #2
0
        private void ConsumeMessage(IdentifyContract message, INetworkConnection connection)
        {
            var p = connection.RemotePeer;

            Host.Peerstore.AddProtocols(p, message.Protocols);
            ConsumeObservedAddress(message.ObservedAddress, connection);

            var lmaddrs = message.ListenAddresses.Select(Multiaddress.Decode).ToArray();

            if (HasConsistentTransport(connection.RemoteMultiaddress, lmaddrs))
            {
                lmaddrs = lmaddrs.Append(connection.RemoteMultiaddress);
            }

            Host.Peerstore.SetAddresses(p, lmaddrs, AddressManager.ConnectedAddrTTL);

            if (!ProtocolVersionsAreCompatible(message.ProtocolVersion, LibP2PVersion))
            {
                connection.Dispose();
                return;
            }

            Host.Peerstore.Put(p, "ProtocolVersion", message.ProtocolVersion);
            Host.Peerstore.Put(p, "AgentVersion", message.AgentVersion);

            ConsumeReceivedPublicKey(connection, message.PublicKey);
        }