protocols.go 6.08 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
	P_UDP               = 0x0111
	P_DCCP              = 0x0021
	P_IP6               = 0x0029
	P_IP6ZONE           = 0x002A
Marco Munizaga's avatar
Marco Munizaga committed
16
	P_IPCIDR            = 0x002B
backkem's avatar
backkem committed
17 18
	P_QUIC              = 0x01CC
	P_SCTP              = 0x0084
godcong's avatar
godcong committed
19
	P_CIRCUIT           = 0x0122
backkem's avatar
backkem committed
20 21 22 23
	P_UDT               = 0x012D
	P_UTP               = 0x012E
	P_UNIX              = 0x0190
	P_P2P               = 0x01A5
Pavel Karpy's avatar
Pavel Karpy committed
24
	P_IPFS              = 0x01A5 // alias for backwards compatibility
backkem's avatar
backkem committed
25
	P_HTTP              = 0x01E0
Pavel Karpy's avatar
Pavel Karpy committed
26
	P_HTTPS             = 0x01BB // deprecated alias for /tls/http
backkem's avatar
backkem committed
27 28
	P_ONION             = 0x01BC // also for backwards compatibility
	P_ONION3            = 0x01BD
29 30
	P_GARLIC64          = 0x01BE
	P_GARLIC32          = 0x01BF
backkem's avatar
backkem committed
31
	P_P2P_WEBRTC_DIRECT = 0x0114
Pavel Karpy's avatar
Pavel Karpy committed
32
	P_TLS               = 0x01c0
Marten Seemann's avatar
Marten Seemann committed
33
	P_NOISE             = 0x01c6
godcong's avatar
godcong committed
34
	P_WS                = 0x01DD
Pavel Karpy's avatar
Pavel Karpy committed
35
	P_WSS               = 0x01DE // deprecated alias for /tls/ws
36
	P_PLAINTEXTV2       = 0x706c61
37 38
)

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

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

idk's avatar
idk committed
138
	protoONION2 = Protocol{
139
		Name:       "onion",
140 141
		Code:       P_ONION,
		VCode:      CodeToVarint(P_ONION),
142 143
		Size:       96,
		Transcoder: TranscoderOnion,
144
	}
idk's avatar
idk committed
145 146 147 148 149 150 151
	protoONION3 = Protocol{
		Name:       "onion3",
		Code:       P_ONION3,
		VCode:      CodeToVarint(P_ONION3),
		Size:       296,
		Transcoder: TranscoderOnion3,
	}
152 153 154 155
	protoGARLIC64 = Protocol{
		Name:       "garlic64",
		Code:       P_GARLIC64,
		VCode:      CodeToVarint(P_GARLIC64),
idk's avatar
idk committed
156
		Size:       LengthPrefixedVarSize,
157
		Transcoder: TranscoderGarlic64,
idk's avatar
idk committed
158
	}
idk's avatar
idk committed
159 160 161 162 163 164 165
	protoGARLIC32 = Protocol{
		Name:       "garlic32",
		Code:       P_GARLIC32,
		VCode:      CodeToVarint(P_GARLIC32),
		Size:       LengthPrefixedVarSize,
		Transcoder: TranscoderGarlic32,
	}
166 167 168 169
	protoUTP = Protocol{
		Name:  "utp",
		Code:  P_UTP,
		VCode: CodeToVarint(P_UTP),
170
	}
171 172 173 174
	protoUDT = Protocol{
		Name:  "udt",
		Code:  P_UDT,
		VCode: CodeToVarint(P_UDT),
175
	}
176 177 178 179
	protoQUIC = Protocol{
		Name:  "quic",
		Code:  P_QUIC,
		VCode: CodeToVarint(P_QUIC),
180
	}
181 182 183 184
	protoHTTP = Protocol{
		Name:  "http",
		Code:  P_HTTP,
		VCode: CodeToVarint(P_HTTP),
185
	}
186 187 188 189
	protoHTTPS = Protocol{
		Name:  "https",
		Code:  P_HTTPS,
		VCode: CodeToVarint(P_HTTPS),
Juan Batiz-Benet's avatar
Juan Batiz-Benet committed
190
	}
191
	protoP2P = Protocol{
192
		Name:       "p2p",
193 194 195 196
		Code:       P_P2P,
		VCode:      CodeToVarint(P_P2P),
		Size:       LengthPrefixedVarSize,
		Transcoder: TranscoderP2P,
Juan Batiz-Benet's avatar
Juan Batiz-Benet committed
197
	}
198 199 200 201 202 203 204
	protoUNIX = Protocol{
		Name:       "unix",
		Code:       P_UNIX,
		VCode:      CodeToVarint(P_UNIX),
		Size:       LengthPrefixedVarSize,
		Path:       true,
		Transcoder: TranscoderUnix,
205
	}
backkem's avatar
backkem committed
206 207 208 209 210
	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
211 212 213 214
	protoTLS = Protocol{
		Name:  "tls",
		Code:  P_TLS,
		VCode: CodeToVarint(P_TLS),
Marten Seemann's avatar
Marten Seemann committed
215 216 217 218 219
	}
	protoNOISE = Protocol{
		Name:  "noise",
		Code:  P_NOISE,
		VCode: CodeToVarint(P_NOISE),
Pavel Karpy's avatar
Pavel Karpy committed
220
	}
221 222 223 224 225
	protoPlaintextV2 = Protocol{
		Name:  "plaintextv2",
		Code:  P_PLAINTEXTV2,
		VCode: CodeToVarint(P_PLAINTEXTV2),
	}
godcong's avatar
godcong committed
226 227 228 229 230
	protoWS = Protocol{
		Name:  "ws",
		Code:  P_WS,
		VCode: CodeToVarint(P_WS),
	}
Steven Allen's avatar
Steven Allen committed
231 232 233 234 235
	protoWSS = Protocol{
		Name:  "wss",
		Code:  P_WSS,
		VCode: CodeToVarint(P_WSS),
	}
236
)
237

238 239 240 241
func init() {
	for _, p := range []Protocol{
		protoIP4,
		protoTCP,
Steven Allen's avatar
Steven Allen committed
242
		protoDNS,
godcong's avatar
godcong committed
243 244 245
		protoDNS4,
		protoDNS6,
		protoDNSADDR,
246 247 248
		protoUDP,
		protoDCCP,
		protoIP6,
mwnx's avatar
mwnx committed
249
		protoIP6ZONE,
Marco Munizaga's avatar
Marco Munizaga committed
250
		protoIPCIDR,
251
		protoSCTP,
godcong's avatar
godcong committed
252
		protoCIRCUIT,
idk's avatar
idk committed
253 254
		protoONION2,
		protoONION3,
255
		protoGARLIC64,
idk's avatar
idk committed
256
		protoGARLIC32,
257 258 259 260 261 262 263
		protoUTP,
		protoUDT,
		protoQUIC,
		protoHTTP,
		protoHTTPS,
		protoP2P,
		protoUNIX,
backkem's avatar
backkem committed
264
		protoP2P_WEBRTC_DIRECT,
Pavel Karpy's avatar
Pavel Karpy committed
265
		protoTLS,
Marten Seemann's avatar
Marten Seemann committed
266
		protoNOISE,
godcong's avatar
godcong committed
267
		protoWS,
Steven Allen's avatar
Steven Allen committed
268
		protoWSS,
269
		protoPlaintextV2,
270 271 272 273
	} {
		if err := AddProtocol(p); err != nil {
			panic(err)
		}
274
	}
275 276 277 278

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