Skip to content

Commit d444e94

Browse files
committed
feat: support tls, quic, quic-v1
Signed-off-by: Chen Kai <[email protected]>
1 parent 31a9900 commit d444e94

File tree

1 file changed

+26
-2
lines changed

1 file changed

+26
-2
lines changed

src/multiaddr.zig

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ const UNIX: u32 = 400;
3030
const P2P: u32 = 421;
3131
const ONION: u32 = 444;
3232
const ONION3: u32 = 445;
33+
const TLS: u32 = 448;
3334
const QUIC: u32 = 460;
3435
const WS: u32 = 477;
3536
const WSS: u32 = 478;
@@ -54,6 +55,7 @@ pub const Protocol = union(enum) {
5455
Ws,
5556
Wss,
5657
Sctp: u16,
58+
Tls,
5759
Quic,
5860
QuicV1,
5961
P2pCircuit,
@@ -77,6 +79,7 @@ pub const Protocol = union(enum) {
7779
.Wss => "wss",
7880
.Unix => "unix",
7981
.Sctp => "sctp",
82+
.Tls => "tls",
8083
.Quic => "quic",
8184
.QuicV1 => "quic-v1",
8285
.P2pCircuit => "p2p-circuit",
@@ -185,6 +188,7 @@ pub const Protocol = union(enum) {
185188
QUIC_V1 => return .{ .proto = .QuicV1, .rest = rest },
186189
P2P_CIRCUIT => return .{ .proto = .P2pCircuit, .rest = rest },
187190
WEBTRANSPORT => return .{ .proto = .WebTransport, .rest = rest },
191+
TLS => return .{ .proto = .Tls, .rest = rest },
188192
P2P => {
189193
const size_decoded = try uvarint.decode(usize, rest);
190194
const size = size_decoded.value;
@@ -270,6 +274,9 @@ pub const Protocol = union(enum) {
270274
std.mem.writeInt(u16, &port_bytes, port, .big);
271275
try writer.writeAll(&port_bytes);
272276
},
277+
.Tls => {
278+
_ = try uvarint.encodeStream(writer, u32, TLS);
279+
},
273280
.Quic => {
274281
_ = try uvarint.encodeStream(writer, u32, QUIC);
275282
},
@@ -604,6 +611,7 @@ pub const Multiaddr = struct {
604611
.Dnsaddr => |host| try result.writer().print("/dnsaddr/{s}", .{host}),
605612
.Dccp => |port| try result.writer().print("/dccp/{}", .{port}),
606613
.Sctp => |port| try result.writer().print("/sctp/{}", .{port}),
614+
.Tls => try result.writer().print("/tls", .{}),
607615
.Quic => try result.writer().print("/quic", .{}),
608616
.QuicV1 => try result.writer().print("/quic-v1", .{}),
609617
.P2pCircuit => try result.writer().print("/p2p-circuit", .{}),
@@ -641,7 +649,7 @@ pub const Multiaddr = struct {
641649
}
642650

643651
fn parseProtocol(allocator: std.mem.Allocator, parts: *std.mem.SplitIterator(u8, .scalar), proto_name: []const u8) !Protocol {
644-
return switch (std.meta.stringToEnum(enum { ip4, tcp, udp, dns, dns4, dns6, http, https, ws, wss, p2p, unix }, proto_name) orelse return Error.UnknownProtocolString) {
652+
return switch (std.meta.stringToEnum(enum { ip4, tcp, udp, dns, dns4, dns6, http, https, ws, wss, p2p, unix, quic, @"quic-v1", tls }, proto_name) orelse return Error.UnknownProtocolString) {
645653
.ip4 => blk: {
646654
const addr_str = parts.next() orelse return Error.InvalidProtocolString;
647655
var addr: [4]u8 = undefined;
@@ -661,6 +669,9 @@ pub const Multiaddr = struct {
661669
const peer_id = try PeerId.fromString(allocator, peer_id_str);
662670
break :blk Protocol{ .P2P = peer_id };
663671
},
672+
.quic => Protocol.Quic,
673+
.@"quic-v1" => Protocol.QuicV1,
674+
.tls => Protocol.Tls,
664675
// Add other protocol parsing as needed
665676
else => Error.UnknownProtocolString,
666677
};
@@ -755,6 +766,9 @@ test "multiaddr from string" {
755766
"/ip4/127.0.0.1",
756767
"/tcp/8080",
757768
"/ip4/198.51.100.0/tcp/4242/p2p/QmYyQSo1c1Ym7orWxLYvCrM2EmxFTANf8wXmmE7DWjhx5N",
769+
"/tls",
770+
"/quic",
771+
"/quic-v1",
758772
};
759773

760774
inline for (cases) |case| {
@@ -1149,7 +1163,17 @@ test "multiaddr protocol - dccp and sctp" {
11491163
}
11501164
}
11511165

1152-
test "multiaddr protocol - quic variants" {
1166+
test "multiaddr protocol - tls and quic variants" {
1167+
// Test TLS
1168+
{
1169+
var ma = Multiaddr.init(testing.allocator);
1170+
defer ma.deinit();
1171+
try ma.push(.Tls);
1172+
const str = try ma.toString(testing.allocator);
1173+
defer testing.allocator.free(str);
1174+
try testing.expectEqualStrings("/tls", str);
1175+
}
1176+
11531177
// Test QUIC
11541178
{
11551179
var ma = Multiaddr.init(testing.allocator);

0 commit comments

Comments
 (0)