2014-07-04 06:42:24 +00:00
|
|
|
package multiaddr
|
|
|
|
|
2017-07-20 21:36:21 +00:00
|
|
|
// You **MUST** register your multicodecs with
|
|
|
|
// https://github.com/multiformats/multicodec before adding them here.
|
|
|
|
//
|
|
|
|
// TODO: Use a single source of truth for all multicodecs instead of
|
|
|
|
// distributing them like this...
|
2014-07-07 08:25:20 +00:00
|
|
|
const (
|
2017-07-20 21:36:21 +00:00
|
|
|
P_IP4 = 0x0004
|
|
|
|
P_TCP = 0x0006
|
|
|
|
P_UDP = 0x0111
|
|
|
|
P_DCCP = 0x0021
|
|
|
|
P_IP6 = 0x0029
|
2017-07-24 07:36:48 +00:00
|
|
|
P_QUIC = 0x01CC
|
2017-07-20 21:36:21 +00:00
|
|
|
P_SCTP = 0x0084
|
|
|
|
P_UDT = 0x012D
|
|
|
|
P_UTP = 0x012E
|
|
|
|
P_UNIX = 0x0190
|
2018-05-24 14:48:52 +00:00
|
|
|
P_P2P = 0x01A5
|
|
|
|
P_IPFS = 0x01A5 // alias for backwards compatability
|
2017-07-20 21:36:21 +00:00
|
|
|
P_HTTP = 0x01E0
|
|
|
|
P_HTTPS = 0x01BB
|
|
|
|
P_ONION = 0x01BC
|
2015-01-18 05:12:54 +00:00
|
|
|
)
|
|
|
|
|
2018-05-24 14:48:52 +00:00
|
|
|
var (
|
2018-07-18 16:09:29 +00:00
|
|
|
protoIP4 = Protocol{
|
|
|
|
Name: "ip4",
|
|
|
|
Code: P_IP4,
|
|
|
|
VCode: CodeToVarint(P_IP4),
|
|
|
|
Size: 32,
|
|
|
|
Path: false,
|
|
|
|
Transcoder: TranscoderIP4,
|
|
|
|
}
|
|
|
|
protoTCP = Protocol{
|
|
|
|
Name: "tcp",
|
|
|
|
Code: P_TCP,
|
|
|
|
VCode: CodeToVarint(P_TCP),
|
|
|
|
Size: 16,
|
|
|
|
Path: false,
|
|
|
|
Transcoder: TranscoderPort,
|
|
|
|
}
|
|
|
|
protoUDP = Protocol{
|
|
|
|
Name: "udp",
|
|
|
|
Code: P_UDP,
|
|
|
|
VCode: CodeToVarint(P_UDP),
|
|
|
|
Size: 16,
|
|
|
|
Path: false,
|
|
|
|
Transcoder: TranscoderPort,
|
|
|
|
}
|
|
|
|
protoDCCP = Protocol{
|
|
|
|
Name: "dccp",
|
|
|
|
Code: P_DCCP,
|
|
|
|
VCode: CodeToVarint(P_DCCP),
|
|
|
|
Size: 16,
|
|
|
|
Path: false,
|
|
|
|
Transcoder: TranscoderPort,
|
|
|
|
}
|
|
|
|
protoIP6 = Protocol{
|
|
|
|
Name: "ip6",
|
|
|
|
Code: P_IP6,
|
|
|
|
VCode: CodeToVarint(P_IP6),
|
|
|
|
Size: 128,
|
|
|
|
Transcoder: TranscoderIP6,
|
|
|
|
}
|
2018-05-24 14:48:52 +00:00
|
|
|
// these require varint
|
2018-07-18 16:09:29 +00:00
|
|
|
protoSCTP = Protocol{
|
|
|
|
Name: "sctp",
|
|
|
|
Code: P_SCTP,
|
|
|
|
VCode: CodeToVarint(P_SCTP),
|
|
|
|
Size: 16,
|
|
|
|
Transcoder: TranscoderPort,
|
2018-05-24 14:48:52 +00:00
|
|
|
}
|
2018-07-18 16:09:29 +00:00
|
|
|
protoONION = Protocol{
|
|
|
|
Name: "onion",
|
|
|
|
Code: P_ONION,
|
|
|
|
VCode: CodeToVarint(P_ONION),
|
|
|
|
Size: 96,
|
|
|
|
Transcoder: TranscoderOnion,
|
2018-05-24 14:48:52 +00:00
|
|
|
}
|
2018-07-18 16:09:29 +00:00
|
|
|
protoUTP = Protocol{
|
|
|
|
Name: "utp",
|
|
|
|
Code: P_UTP,
|
|
|
|
VCode: CodeToVarint(P_UTP),
|
2018-06-23 01:39:50 +00:00
|
|
|
}
|
2018-07-18 16:09:29 +00:00
|
|
|
protoUDT = Protocol{
|
|
|
|
Name: "udt",
|
|
|
|
Code: P_UDT,
|
|
|
|
VCode: CodeToVarint(P_UDT),
|
2018-06-23 01:39:50 +00:00
|
|
|
}
|
2018-07-18 16:09:29 +00:00
|
|
|
protoQUIC = Protocol{
|
|
|
|
Name: "quic",
|
|
|
|
Code: P_QUIC,
|
|
|
|
VCode: CodeToVarint(P_QUIC),
|
2018-06-23 01:34:55 +00:00
|
|
|
}
|
2018-07-18 16:09:29 +00:00
|
|
|
protoHTTP = Protocol{
|
|
|
|
Name: "http",
|
|
|
|
Code: P_HTTP,
|
|
|
|
VCode: CodeToVarint(P_HTTP),
|
2018-06-23 01:34:55 +00:00
|
|
|
}
|
2018-07-18 16:09:29 +00:00
|
|
|
protoHTTPS = Protocol{
|
|
|
|
Name: "https",
|
|
|
|
Code: P_HTTPS,
|
|
|
|
VCode: CodeToVarint(P_HTTPS),
|
2015-01-09 13:51:16 +00:00
|
|
|
}
|
2018-07-18 16:09:29 +00:00
|
|
|
protoP2P = Protocol{
|
|
|
|
Name: "ipfs",
|
|
|
|
Code: P_P2P,
|
|
|
|
VCode: CodeToVarint(P_P2P),
|
|
|
|
Size: LengthPrefixedVarSize,
|
|
|
|
Transcoder: TranscoderP2P,
|
2015-01-09 13:51:16 +00:00
|
|
|
}
|
2018-07-18 16:09:29 +00:00
|
|
|
protoUNIX = Protocol{
|
|
|
|
Name: "unix",
|
|
|
|
Code: P_UNIX,
|
|
|
|
VCode: CodeToVarint(P_UNIX),
|
|
|
|
Size: LengthPrefixedVarSize,
|
|
|
|
Path: true,
|
|
|
|
Transcoder: TranscoderUnix,
|
2016-04-29 21:16:41 +00:00
|
|
|
}
|
2018-07-18 16:09:29 +00:00
|
|
|
)
|
2014-11-19 21:01:52 +00:00
|
|
|
|
2018-07-18 16:09:29 +00:00
|
|
|
func init() {
|
|
|
|
for _, p := range []Protocol{
|
|
|
|
protoIP4,
|
|
|
|
protoTCP,
|
|
|
|
protoUDP,
|
|
|
|
protoDCCP,
|
|
|
|
protoIP6,
|
|
|
|
protoSCTP,
|
|
|
|
protoONION,
|
|
|
|
protoUTP,
|
|
|
|
protoUDT,
|
|
|
|
protoQUIC,
|
|
|
|
protoHTTP,
|
|
|
|
protoHTTPS,
|
|
|
|
protoP2P,
|
|
|
|
protoUNIX,
|
|
|
|
} {
|
|
|
|
if err := AddProtocol(p); err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
2014-11-19 21:01:52 +00:00
|
|
|
}
|
2018-07-18 16:09:29 +00:00
|
|
|
|
|
|
|
// explicitly set both of these
|
|
|
|
protocolsByName["p2p"] = protoP2P
|
|
|
|
protocolsByName["ipfs"] = protoP2P
|
2014-11-19 21:01:52 +00:00
|
|
|
}
|