Composable and future-proof network addresses https://github.com/multiformats/multiaddr
Go to file
Jeromy 9e13209db1 fix underflow error found by fuzzing 2016-05-04 10:51:57 -07:00
.travis.yml use newer go versions 2016-05-02 09:17:03 -07:00
LICENSE MIT license 2014-09-28 15:21:18 -07:00
README.md Protocols now value 2015-01-09 05:37:39 -08:00
codec.go fix underflow error found by fuzzing 2016-05-04 10:51:57 -07:00
doc.go docs 2014-10-06 04:05:20 -07:00
interface.go add method to lookup values in a multiaddr 2016-01-17 05:14:38 -08:00
multiaddr.go cleanup panics and make NewFromBytes faster 2016-04-29 14:16:41 -07:00
multiaddr_test.go cleanup panics and make NewFromBytes faster 2016-04-29 14:16:41 -07:00
protocols.csv Renamed tor to onion and added embedded port field 2015-08-31 03:19:47 +02:00
protocols.go cleanup panics and make NewFromBytes faster 2016-04-29 14:16:41 -07:00
util.go faster encapsulation + join 2014-11-05 02:30:53 -08:00

README.md

go-multiaddr

multiaddr implementation in Go.

Example

Simple

import ma "github.com/jbenet/go-multiaddr"

// construct from a string (err signals parse failure)
m1, err := ma.NewMultiaddr("/ip4/127.0.0.1/udp/1234")

// construct from bytes (err signals parse failure)
m2, err := ma.NewMultiaddrBytes(m1.Bytes())

// true
strings.Equal(m1.String(), "/ip4/127.0.0.1/udp/1234")
strings.Equal(m1.String(), m2.String())
bytes.Equal(m1.Bytes(), m2.Bytes())
m1.Equal(m2)
m2.Equal(m1)

Protocols

// get the multiaddr protocol description objects
addr.Protocols()
// []Protocol{
//   Protocol{ Code: 4, Name: 'ip4', Size: 32},
//   Protocol{ Code: 17, Name: 'udp', Size: 16},
// }

En/decapsulate

m.Encapsulate(ma.NewMultiaddr("/sctp/5678"))
// <Multiaddr /ip4/127.0.0.1/udp/1234/sctp/5678>
m.Decapsulate(ma.NewMultiaddr("/udp")) // up to + inc last occurrence of subaddr
// <Multiaddr /ip4/127.0.0.1>

Tunneling

Multiaddr allows expressing tunnels very nicely.

printer, _ := ma.NewMultiaddr("/ip4/192.168.0.13/tcp/80")
proxy, _ := ma.NewMultiaddr("/ip4/10.20.30.40/tcp/443")
printerOverProxy := proxy.Encapsulate(printer)
// /ip4/10.20.30.40/tcp/443/ip4/192.168.0.13/tcp/80

proxyAgain := printerOverProxy.Decapsulate(printer)
// /ip4/10.20.30.40/tcp/443