2018-07-04 10:51:47 +00:00
|
|
|
package multiaddr
|
|
|
|
|
|
|
|
// You **MUST** register your multicodecs with
|
|
|
|
// https://github.com/multiformats/multicodec before adding them here.
|
|
|
|
const (
|
2022-11-04 13:57:20 +00:00
|
|
|
P_IP4 = 4
|
|
|
|
P_TCP = 6
|
|
|
|
P_DNS = 53 // 4 or 6
|
|
|
|
P_DNS4 = 54
|
|
|
|
P_DNS6 = 55
|
|
|
|
P_DNSADDR = 56
|
|
|
|
P_UDP = 273
|
|
|
|
P_DCCP = 33
|
|
|
|
P_IP6 = 41
|
|
|
|
P_IP6ZONE = 42
|
|
|
|
P_IPCIDR = 43
|
|
|
|
P_QUIC = 460
|
|
|
|
P_WEBTRANSPORT = 465
|
|
|
|
P_CERTHASH = 466
|
|
|
|
P_SCTP = 132
|
|
|
|
P_CIRCUIT = 290
|
|
|
|
P_UDT = 301
|
|
|
|
P_UTP = 302
|
|
|
|
P_UNIX = 400
|
|
|
|
P_P2P = 421
|
|
|
|
P_IPFS = P_P2P // alias for backwards compatibility
|
|
|
|
P_HTTP = 480
|
|
|
|
P_HTTPS = 443 // deprecated alias for /tls/http
|
|
|
|
P_ONION = 444 // also for backwards compatibility
|
|
|
|
P_ONION3 = 445
|
|
|
|
P_GARLIC64 = 446
|
|
|
|
P_GARLIC32 = 447
|
|
|
|
P_P2P_WEBRTC_DIRECT = 276
|
|
|
|
P_TLS = 448
|
|
|
|
P_SNI = 449
|
|
|
|
P_NOISE = 454
|
|
|
|
P_WS = 477
|
|
|
|
P_WSS = 478 // deprecated alias for /tls/ws
|
|
|
|
P_PLAINTEXTV2 = 7367777
|
|
|
|
P_WEBRTC = 280
|
2018-07-04 10:51:47 +00:00
|
|
|
)
|
|
|
|
|
2019-06-09 07:24:20 +00:00
|
|
|
var (
|
|
|
|
protoIP4 = Protocol{
|
|
|
|
Name: "ip4",
|
|
|
|
Code: P_IP4,
|
|
|
|
VCode: CodeToVarint(P_IP4),
|
|
|
|
Size: 32,
|
|
|
|
Path: false,
|
|
|
|
Transcoder: TranscoderIP4,
|
2018-07-04 10:51:47 +00:00
|
|
|
}
|
2019-06-09 07:24:20 +00:00
|
|
|
protoTCP = Protocol{
|
|
|
|
Name: "tcp",
|
|
|
|
Code: P_TCP,
|
|
|
|
VCode: CodeToVarint(P_TCP),
|
|
|
|
Size: 16,
|
|
|
|
Path: false,
|
|
|
|
Transcoder: TranscoderPort,
|
2018-07-04 10:51:47 +00:00
|
|
|
}
|
2019-10-04 15:21:24 +00:00
|
|
|
protoDNS = Protocol{
|
|
|
|
Code: P_DNS,
|
|
|
|
Size: LengthPrefixedVarSize,
|
|
|
|
Name: "dns",
|
|
|
|
VCode: CodeToVarint(P_DNS),
|
|
|
|
Transcoder: TranscoderDns,
|
|
|
|
}
|
|
|
|
protoDNS4 = Protocol{
|
|
|
|
Code: P_DNS4,
|
|
|
|
Size: LengthPrefixedVarSize,
|
|
|
|
Name: "dns4",
|
|
|
|
VCode: CodeToVarint(P_DNS4),
|
|
|
|
Transcoder: TranscoderDns,
|
|
|
|
}
|
|
|
|
protoDNS6 = Protocol{
|
|
|
|
Code: P_DNS6,
|
|
|
|
Size: LengthPrefixedVarSize,
|
|
|
|
Name: "dns6",
|
|
|
|
VCode: CodeToVarint(P_DNS6),
|
|
|
|
Transcoder: TranscoderDns,
|
|
|
|
}
|
|
|
|
protoDNSADDR = Protocol{
|
|
|
|
Code: P_DNSADDR,
|
|
|
|
Size: LengthPrefixedVarSize,
|
|
|
|
Name: "dnsaddr",
|
|
|
|
VCode: CodeToVarint(P_DNSADDR),
|
|
|
|
Transcoder: TranscoderDns,
|
|
|
|
}
|
2019-06-09 07:24:20 +00:00
|
|
|
protoUDP = Protocol{
|
|
|
|
Name: "udp",
|
|
|
|
Code: P_UDP,
|
|
|
|
VCode: CodeToVarint(P_UDP),
|
|
|
|
Size: 16,
|
|
|
|
Path: false,
|
|
|
|
Transcoder: TranscoderPort,
|
2018-07-04 10:51:47 +00:00
|
|
|
}
|
2019-06-09 07:24:20 +00:00
|
|
|
protoDCCP = Protocol{
|
|
|
|
Name: "dccp",
|
|
|
|
Code: P_DCCP,
|
|
|
|
VCode: CodeToVarint(P_DCCP),
|
|
|
|
Size: 16,
|
|
|
|
Path: false,
|
|
|
|
Transcoder: TranscoderPort,
|
2018-07-04 10:51:47 +00:00
|
|
|
}
|
2019-06-09 07:24:20 +00:00
|
|
|
protoIP6 = Protocol{
|
|
|
|
Name: "ip6",
|
|
|
|
Code: P_IP6,
|
|
|
|
VCode: CodeToVarint(P_IP6),
|
|
|
|
Size: 128,
|
|
|
|
Transcoder: TranscoderIP6,
|
2018-07-04 10:51:47 +00:00
|
|
|
}
|
2022-08-19 16:34:07 +00:00
|
|
|
protoIPCIDR = Protocol{
|
|
|
|
Name: "ipcidr",
|
|
|
|
Code: P_IPCIDR,
|
|
|
|
VCode: CodeToVarint(P_IPCIDR),
|
|
|
|
Size: 8,
|
|
|
|
Transcoder: TranscoderIPCIDR,
|
|
|
|
}
|
2019-06-09 07:24:20 +00:00
|
|
|
// these require varint
|
|
|
|
protoIP6ZONE = Protocol{
|
|
|
|
Name: "ip6zone",
|
|
|
|
Code: P_IP6ZONE,
|
|
|
|
VCode: CodeToVarint(P_IP6ZONE),
|
|
|
|
Size: LengthPrefixedVarSize,
|
|
|
|
Path: false,
|
|
|
|
Transcoder: TranscoderIP6Zone,
|
|
|
|
}
|
|
|
|
protoSCTP = Protocol{
|
|
|
|
Name: "sctp",
|
|
|
|
Code: P_SCTP,
|
|
|
|
VCode: CodeToVarint(P_SCTP),
|
|
|
|
Size: 16,
|
|
|
|
Transcoder: TranscoderPort,
|
|
|
|
}
|
2019-10-04 15:21:24 +00:00
|
|
|
|
|
|
|
protoCIRCUIT = Protocol{
|
|
|
|
Code: P_CIRCUIT,
|
|
|
|
Size: 0,
|
|
|
|
Name: "p2p-circuit",
|
|
|
|
VCode: CodeToVarint(P_CIRCUIT),
|
|
|
|
}
|
|
|
|
|
2019-06-09 07:24:20 +00:00
|
|
|
protoONION2 = Protocol{
|
|
|
|
Name: "onion",
|
|
|
|
Code: P_ONION,
|
|
|
|
VCode: CodeToVarint(P_ONION),
|
|
|
|
Size: 96,
|
|
|
|
Transcoder: TranscoderOnion,
|
|
|
|
}
|
|
|
|
protoONION3 = Protocol{
|
|
|
|
Name: "onion3",
|
|
|
|
Code: P_ONION3,
|
|
|
|
VCode: CodeToVarint(P_ONION3),
|
|
|
|
Size: 296,
|
|
|
|
Transcoder: TranscoderOnion3,
|
|
|
|
}
|
|
|
|
protoGARLIC64 = Protocol{
|
|
|
|
Name: "garlic64",
|
|
|
|
Code: P_GARLIC64,
|
|
|
|
VCode: CodeToVarint(P_GARLIC64),
|
|
|
|
Size: LengthPrefixedVarSize,
|
|
|
|
Transcoder: TranscoderGarlic64,
|
|
|
|
}
|
|
|
|
protoGARLIC32 = Protocol{
|
|
|
|
Name: "garlic32",
|
|
|
|
Code: P_GARLIC32,
|
|
|
|
VCode: CodeToVarint(P_GARLIC32),
|
|
|
|
Size: LengthPrefixedVarSize,
|
|
|
|
Transcoder: TranscoderGarlic32,
|
|
|
|
}
|
|
|
|
protoUTP = Protocol{
|
|
|
|
Name: "utp",
|
|
|
|
Code: P_UTP,
|
|
|
|
VCode: CodeToVarint(P_UTP),
|
|
|
|
}
|
|
|
|
protoUDT = Protocol{
|
|
|
|
Name: "udt",
|
|
|
|
Code: P_UDT,
|
|
|
|
VCode: CodeToVarint(P_UDT),
|
|
|
|
}
|
|
|
|
protoQUIC = Protocol{
|
|
|
|
Name: "quic",
|
|
|
|
Code: P_QUIC,
|
|
|
|
VCode: CodeToVarint(P_QUIC),
|
|
|
|
}
|
2022-08-19 16:34:07 +00:00
|
|
|
protoWEBTRANSPORT = Protocol{
|
|
|
|
Name: "webtransport",
|
|
|
|
Code: P_WEBTRANSPORT,
|
|
|
|
VCode: CodeToVarint(P_WEBTRANSPORT),
|
|
|
|
}
|
|
|
|
protoCERTHASH = Protocol{
|
|
|
|
Name: "certhash",
|
|
|
|
Code: P_CERTHASH,
|
|
|
|
VCode: CodeToVarint(P_CERTHASH),
|
|
|
|
Size: LengthPrefixedVarSize,
|
|
|
|
Transcoder: TranscoderCertHash,
|
|
|
|
}
|
2019-06-09 07:24:20 +00:00
|
|
|
protoHTTP = Protocol{
|
|
|
|
Name: "http",
|
|
|
|
Code: P_HTTP,
|
|
|
|
VCode: CodeToVarint(P_HTTP),
|
|
|
|
}
|
|
|
|
protoHTTPS = Protocol{
|
|
|
|
Name: "https",
|
|
|
|
Code: P_HTTPS,
|
|
|
|
VCode: CodeToVarint(P_HTTPS),
|
|
|
|
}
|
|
|
|
protoP2P = Protocol{
|
2021-06-16 20:19:45 +00:00
|
|
|
Name: "p2p",
|
2019-06-09 07:24:20 +00:00
|
|
|
Code: P_P2P,
|
|
|
|
VCode: CodeToVarint(P_P2P),
|
|
|
|
Size: LengthPrefixedVarSize,
|
|
|
|
Transcoder: TranscoderP2P,
|
|
|
|
}
|
|
|
|
protoUNIX = Protocol{
|
|
|
|
Name: "unix",
|
|
|
|
Code: P_UNIX,
|
|
|
|
VCode: CodeToVarint(P_UNIX),
|
|
|
|
Size: LengthPrefixedVarSize,
|
|
|
|
Path: true,
|
|
|
|
Transcoder: TranscoderUnix,
|
|
|
|
}
|
|
|
|
protoP2P_WEBRTC_DIRECT = Protocol{
|
|
|
|
Name: "p2p-webrtc-direct",
|
|
|
|
Code: P_P2P_WEBRTC_DIRECT,
|
|
|
|
VCode: CodeToVarint(P_P2P_WEBRTC_DIRECT),
|
|
|
|
}
|
2021-10-19 13:43:41 +00:00
|
|
|
protoTLS = Protocol{
|
|
|
|
Name: "tls",
|
|
|
|
Code: P_TLS,
|
|
|
|
VCode: CodeToVarint(P_TLS),
|
|
|
|
}
|
2022-11-04 13:57:20 +00:00
|
|
|
protoSNI = Protocol{
|
|
|
|
Name: "sni",
|
|
|
|
Size: LengthPrefixedVarSize,
|
|
|
|
Code: P_SNI,
|
|
|
|
VCode: CodeToVarint(P_SNI),
|
|
|
|
Transcoder: TranscoderDns,
|
|
|
|
}
|
2021-10-19 13:43:41 +00:00
|
|
|
protoNOISE = Protocol{
|
|
|
|
Name: "noise",
|
|
|
|
Code: P_NOISE,
|
|
|
|
VCode: CodeToVarint(P_NOISE),
|
|
|
|
}
|
2022-04-01 16:16:46 +00:00
|
|
|
protoPlaintextV2 = Protocol{
|
|
|
|
Name: "plaintextv2",
|
|
|
|
Code: P_PLAINTEXTV2,
|
|
|
|
VCode: CodeToVarint(P_PLAINTEXTV2),
|
|
|
|
}
|
2019-10-04 15:21:24 +00:00
|
|
|
protoWS = Protocol{
|
|
|
|
Name: "ws",
|
|
|
|
Code: P_WS,
|
|
|
|
VCode: CodeToVarint(P_WS),
|
|
|
|
}
|
2021-06-16 20:19:45 +00:00
|
|
|
protoWSS = Protocol{
|
|
|
|
Name: "wss",
|
|
|
|
Code: P_WSS,
|
|
|
|
VCode: CodeToVarint(P_WSS),
|
|
|
|
}
|
2022-11-04 13:57:20 +00:00
|
|
|
protoWebRTC = Protocol{
|
|
|
|
Name: "webrtc",
|
|
|
|
Code: P_WEBRTC,
|
|
|
|
VCode: CodeToVarint(P_WEBRTC),
|
|
|
|
}
|
2019-06-09 07:24:20 +00:00
|
|
|
)
|
2018-07-04 10:51:47 +00:00
|
|
|
|
2019-06-09 07:24:20 +00:00
|
|
|
func init() {
|
|
|
|
for _, p := range []Protocol{
|
|
|
|
protoIP4,
|
|
|
|
protoTCP,
|
2019-10-04 15:21:24 +00:00
|
|
|
protoDNS,
|
|
|
|
protoDNS4,
|
|
|
|
protoDNS6,
|
|
|
|
protoDNSADDR,
|
2019-06-09 07:24:20 +00:00
|
|
|
protoUDP,
|
|
|
|
protoDCCP,
|
|
|
|
protoIP6,
|
|
|
|
protoIP6ZONE,
|
2022-08-19 16:34:07 +00:00
|
|
|
protoIPCIDR,
|
2019-06-09 07:24:20 +00:00
|
|
|
protoSCTP,
|
2019-10-04 15:21:24 +00:00
|
|
|
protoCIRCUIT,
|
2019-06-09 07:24:20 +00:00
|
|
|
protoONION2,
|
|
|
|
protoONION3,
|
|
|
|
protoGARLIC64,
|
|
|
|
protoGARLIC32,
|
|
|
|
protoUTP,
|
|
|
|
protoUDT,
|
|
|
|
protoQUIC,
|
2022-08-19 16:34:07 +00:00
|
|
|
protoWEBTRANSPORT,
|
|
|
|
protoCERTHASH,
|
2019-06-09 07:24:20 +00:00
|
|
|
protoHTTP,
|
|
|
|
protoHTTPS,
|
|
|
|
protoP2P,
|
|
|
|
protoUNIX,
|
|
|
|
protoP2P_WEBRTC_DIRECT,
|
2021-10-19 13:43:41 +00:00
|
|
|
protoTLS,
|
2022-11-04 13:57:20 +00:00
|
|
|
protoSNI,
|
2021-10-19 13:43:41 +00:00
|
|
|
protoNOISE,
|
2019-10-04 15:21:24 +00:00
|
|
|
protoWS,
|
2021-06-16 20:19:45 +00:00
|
|
|
protoWSS,
|
2022-04-01 16:16:46 +00:00
|
|
|
protoPlaintextV2,
|
2022-11-04 13:57:20 +00:00
|
|
|
protoWebRTC,
|
2019-06-09 07:24:20 +00:00
|
|
|
} {
|
|
|
|
if err := AddProtocol(p); err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
2018-07-04 10:51:47 +00:00
|
|
|
}
|
|
|
|
|
2019-06-09 07:24:20 +00:00
|
|
|
// explicitly set both of these
|
|
|
|
protocolsByName["p2p"] = protoP2P
|
|
|
|
protocolsByName["ipfs"] = protoP2P
|
2018-07-04 10:51:47 +00:00
|
|
|
}
|