示例#1
0
        private static int ParseProtocol(byte[] bytes, int offset, short code, out MultiaddressProtocol protocol)
        {
            var start = offset;

            protocol = CreateProtocol(code);
            offset  += DecodeProtocol(protocol, bytes, offset);
            return(offset - start);
        }
示例#2
0
        private static IEnumerable <string> ProtocolToStrings(MultiaddressProtocol p)
        {
            yield return(p.Name);

            if (p.Value != null)
            {
                yield return(p.Value.ToString());
            }
        }
示例#3
0
        private static IEnumerable <MultiaddressProtocol> DecodeProtocols(byte[] bytes)
        {
            var   offset = 0;
            short code   = 0;
            MultiaddressProtocol protocol = null;

            while (offset < bytes.Length)
            {
                offset += ParseProtocolCode(bytes, offset, out code);
                if (SupportsProtocol(code))
                {
                    offset += ParseProtocol(bytes, offset, code, out protocol);

                    yield return(protocol);
                }
            }
        }
示例#4
0
        private static IEnumerable <byte> EncodeProtocol(MultiaddressProtocol p)
        {
            var code = Binary.Varint.GetBytes((ulong)p.Code);

            if (p.Size == 0)
            {
                return(code);
            }

            var bytes = p.ToBytes();

            if (p.Size > 0)
            {
                return(code.Concat(bytes));
            }

            var prefix = Binary.Varint.GetBytes((ulong)bytes.Length);

            return(code.Concat(prefix).Concat(bytes));
        }
示例#5
0
        private static int DecodeProtocol(MultiaddressProtocol protocol, byte[] bytes, int offset)
        {
            int start = offset;
            int count = 0;

            if (protocol.Size > 0)
            {
                count = protocol.Size / 8;
            }
            else if (protocol.Size == -1)
            {
                uint proxy = 0;
                offset += Binary.Varint.Read(bytes, offset, out proxy);
                count   = (int)proxy;
            }

            if (count > 0)
            {
                protocol.Decode(bytes.Slice(offset, count));
                offset += count;
            }

            return(offset - start);
        }