@@ -30,6 +30,7 @@ const UNIX: u32 = 400;
3030const P2P : u32 = 421 ;
3131const ONION : u32 = 444 ;
3232const ONION3 : u32 = 445 ;
33+ const TLS : u32 = 448 ;
3334const QUIC : u32 = 460 ;
3435const WS : u32 = 477 ;
3536const 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