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); }
private static IEnumerable <string> ProtocolToStrings(MultiaddressProtocol p) { yield return(p.Name); if (p.Value != null) { yield return(p.Value.ToString()); } }
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); } } }
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)); }
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); }