protocols.go 5.25 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 23 24 25 26 27
	P_UDT               = 0x012D
	P_UTP               = 0x012E
	P_UNIX              = 0x0190
	P_P2P               = 0x01A5
	P_IPFS              = 0x01A5 // alias for backwards compatability
	P_HTTP              = 0x01E0
	P_HTTPS             = 0x01BB
	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
godcong's avatar
godcong committed
31
	P_WS                = 0x01DD
32 33
)

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

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

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

206 207 208 209
func init() {
	for _, p := range []Protocol{
		protoIP4,
		protoTCP,
Steven Allen's avatar
Steven Allen committed
210
		protoDNS,
godcong's avatar
godcong committed
211 212 213
		protoDNS4,
		protoDNS6,
		protoDNSADDR,
214 215 216
		protoUDP,
		protoDCCP,
		protoIP6,
mwnx's avatar
mwnx committed
217
		protoIP6ZONE,
218
		protoSCTP,
godcong's avatar
godcong committed
219
		protoCIRCUIT,
idk's avatar
idk committed
220 221
		protoONION2,
		protoONION3,
222
		protoGARLIC64,
idk's avatar
idk committed
223
		protoGARLIC32,
224 225 226 227 228 229 230
		protoUTP,
		protoUDT,
		protoQUIC,
		protoHTTP,
		protoHTTPS,
		protoP2P,
		protoUNIX,
backkem's avatar
backkem committed
231
		protoP2P_WEBRTC_DIRECT,
godcong's avatar
godcong committed
232
		protoWS,
233 234 235 236
	} {
		if err := AddProtocol(p); err != nil {
			panic(err)
		}
237
	}
238 239 240 241

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