protocols.go 5.58 KB
Newer Older
Juan Batiz-Benet's avatar
Juan Batiz-Benet committed
1 2
package multiaddr

3 4
// You **MUST** register your multicodecs with
// https://github.com/multiformats/multicodec before adding them here.
Juan Batiz-Benet's avatar
Juan Batiz-Benet committed
5
const (
backkem's avatar
backkem committed
6 7
	P_IP4               = 0x0004
	P_TCP               = 0x0006
Steven Allen's avatar
Steven Allen committed
8
	P_DNS               = 0x0035 // 4 or 6
godcong's avatar
godcong committed
9 10 11
	P_DNS4              = 0x0036
	P_DNS6              = 0x0037
	P_DNSADDR           = 0x0038
backkem's avatar
backkem committed
12 13 14 15 16 17
	P_UDP               = 0x0111
	P_DCCP              = 0x0021
	P_IP6               = 0x0029
	P_IP6ZONE           = 0x002A
	P_QUIC              = 0x01CC
	P_SCTP              = 0x0084
godcong's avatar
godcong committed
18
	P_CIRCUIT           = 0x0122
backkem's avatar
backkem committed
19 20 21 22
	P_UDT               = 0x012D
	P_UTP               = 0x012E
	P_UNIX              = 0x0190
	P_P2P               = 0x01A5
Pavel Karpy's avatar
Pavel Karpy committed
23
	P_IPFS              = 0x01A5 // alias for backwards compatibility
backkem's avatar
backkem committed
24
	P_HTTP              = 0x01E0
Pavel Karpy's avatar
Pavel Karpy committed
25
	P_HTTPS             = 0x01BB // deprecated alias for /tls/http
backkem's avatar
backkem committed
26 27
	P_ONION             = 0x01BC // also for backwards compatibility
	P_ONION3            = 0x01BD
28 29
	P_GARLIC64          = 0x01BE
	P_GARLIC32          = 0x01BF
backkem's avatar
backkem committed
30
	P_P2P_WEBRTC_DIRECT = 0x0114
Pavel Karpy's avatar
Pavel Karpy committed
31
	P_TLS               = 0x01c0
godcong's avatar
godcong committed
32
	P_WS                = 0x01DD
Pavel Karpy's avatar
Pavel Karpy committed
33
	P_WSS               = 0x01DE // deprecated alias for /tls/ws
34 35
)

36
var (
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
	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,
	}
Steven Allen's avatar
Steven Allen committed
53 54 55 56 57 58 59
	protoDNS = Protocol{
		Code:       P_DNS,
		Size:       LengthPrefixedVarSize,
		Name:       "dns",
		VCode:      CodeToVarint(P_DNS),
		Transcoder: TranscoderDns,
	}
godcong's avatar
godcong committed
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
	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,
	}
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
	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,
	}
104
	// these require varint
mwnx's avatar
mwnx committed
105 106 107 108 109 110 111 112
	protoIP6ZONE = Protocol{
		Name:       "ip6zone",
		Code:       P_IP6ZONE,
		VCode:      CodeToVarint(P_IP6ZONE),
		Size:       LengthPrefixedVarSize,
		Path:       false,
		Transcoder: TranscoderIP6Zone,
	}
113 114 115 116 117 118
	protoSCTP = Protocol{
		Name:       "sctp",
		Code:       P_SCTP,
		VCode:      CodeToVarint(P_SCTP),
		Size:       16,
		Transcoder: TranscoderPort,
119
	}
godcong's avatar
godcong committed
120 121 122 123 124 125 126 127

	protoCIRCUIT = Protocol{
		Code:  P_CIRCUIT,
		Size:  0,
		Name:  "p2p-circuit",
		VCode: CodeToVarint(P_CIRCUIT),
	}

idk's avatar
idk committed
128
	protoONION2 = Protocol{
129
		Name:       "onion",
130 131
		Code:       P_ONION,
		VCode:      CodeToVarint(P_ONION),
132 133
		Size:       96,
		Transcoder: TranscoderOnion,
134
	}
idk's avatar
idk committed
135 136 137 138 139 140 141
	protoONION3 = Protocol{
		Name:       "onion3",
		Code:       P_ONION3,
		VCode:      CodeToVarint(P_ONION3),
		Size:       296,
		Transcoder: TranscoderOnion3,
	}
142 143 144 145
	protoGARLIC64 = Protocol{
		Name:       "garlic64",
		Code:       P_GARLIC64,
		VCode:      CodeToVarint(P_GARLIC64),
idk's avatar
idk committed
146
		Size:       LengthPrefixedVarSize,
147
		Transcoder: TranscoderGarlic64,
idk's avatar
idk committed
148
	}
idk's avatar
idk committed
149 150 151 152 153 154 155
	protoGARLIC32 = Protocol{
		Name:       "garlic32",
		Code:       P_GARLIC32,
		VCode:      CodeToVarint(P_GARLIC32),
		Size:       LengthPrefixedVarSize,
		Transcoder: TranscoderGarlic32,
	}
156 157 158 159
	protoUTP = Protocol{
		Name:  "utp",
		Code:  P_UTP,
		VCode: CodeToVarint(P_UTP),
160
	}
161 162 163 164
	protoUDT = Protocol{
		Name:  "udt",
		Code:  P_UDT,
		VCode: CodeToVarint(P_UDT),
165
	}
166 167 168 169
	protoQUIC = Protocol{
		Name:  "quic",
		Code:  P_QUIC,
		VCode: CodeToVarint(P_QUIC),
170
	}
171 172 173 174
	protoHTTP = Protocol{
		Name:  "http",
		Code:  P_HTTP,
		VCode: CodeToVarint(P_HTTP),
175
	}
176 177 178 179
	protoHTTPS = Protocol{
		Name:  "https",
		Code:  P_HTTPS,
		VCode: CodeToVarint(P_HTTPS),
Juan Batiz-Benet's avatar
Juan Batiz-Benet committed
180
	}
181
	protoP2P = Protocol{
182
		Name:       "p2p",
183 184 185 186
		Code:       P_P2P,
		VCode:      CodeToVarint(P_P2P),
		Size:       LengthPrefixedVarSize,
		Transcoder: TranscoderP2P,
Juan Batiz-Benet's avatar
Juan Batiz-Benet committed
187
	}
188 189 190 191 192 193 194
	protoUNIX = Protocol{
		Name:       "unix",
		Code:       P_UNIX,
		VCode:      CodeToVarint(P_UNIX),
		Size:       LengthPrefixedVarSize,
		Path:       true,
		Transcoder: TranscoderUnix,
195
	}
backkem's avatar
backkem committed
196 197 198 199 200
	protoP2P_WEBRTC_DIRECT = Protocol{
		Name:  "p2p-webrtc-direct",
		Code:  P_P2P_WEBRTC_DIRECT,
		VCode: CodeToVarint(P_P2P_WEBRTC_DIRECT),
	}
Pavel Karpy's avatar
Pavel Karpy committed
201 202 203 204 205 206
	protoTLS = Protocol{
		Name:  "tls",
		Code:  P_TLS,
		VCode: CodeToVarint(P_TLS),
		Size:  0,
	}
godcong's avatar
godcong committed
207 208 209 210 211
	protoWS = Protocol{
		Name:  "ws",
		Code:  P_WS,
		VCode: CodeToVarint(P_WS),
	}
Steven Allen's avatar
Steven Allen committed
212 213 214 215 216
	protoWSS = Protocol{
		Name:  "wss",
		Code:  P_WSS,
		VCode: CodeToVarint(P_WSS),
	}
217
)
218

219 220 221 222
func init() {
	for _, p := range []Protocol{
		protoIP4,
		protoTCP,
Steven Allen's avatar
Steven Allen committed
223
		protoDNS,
godcong's avatar
godcong committed
224 225 226
		protoDNS4,
		protoDNS6,
		protoDNSADDR,
227 228 229
		protoUDP,
		protoDCCP,
		protoIP6,
mwnx's avatar
mwnx committed
230
		protoIP6ZONE,
231
		protoSCTP,
godcong's avatar
godcong committed
232
		protoCIRCUIT,
idk's avatar
idk committed
233 234
		protoONION2,
		protoONION3,
235
		protoGARLIC64,
idk's avatar
idk committed
236
		protoGARLIC32,
237 238 239 240 241 242 243
		protoUTP,
		protoUDT,
		protoQUIC,
		protoHTTP,
		protoHTTPS,
		protoP2P,
		protoUNIX,
backkem's avatar
backkem committed
244
		protoP2P_WEBRTC_DIRECT,
Pavel Karpy's avatar
Pavel Karpy committed
245
		protoTLS,
godcong's avatar
godcong committed
246
		protoWS,
Steven Allen's avatar
Steven Allen committed
247
		protoWSS,
248 249 250 251
	} {
		if err := AddProtocol(p); err != nil {
			panic(err)
		}
252
	}
253 254 255 256

	// explicitly set both of these
	protocolsByName["p2p"] = protoP2P
	protocolsByName["ipfs"] = protoP2P
257
}