func (pi *PeerInfo) UnmarshalJSON(b []byte) error { var data map[string]interface{} err := json.Unmarshal(b, &data) if err != nil { return err } pid, err := IDB58Decode(data["ID"].(string)) if err != nil { return err } pi.ID = pid addrs, ok := data["Addrs"].([]interface{}) if ok { for _, a := range addrs { pi.Addrs = append(pi.Addrs, ma.StringCast(a.(string))) } } return nil }
func IpfsStart(waitall bool) error { var addrs []string n := GetNumNodes() for i := 0; i < n; i++ { dir := IpfsDirN(i) cmd := exec.Command("ipfs", "daemon") cmd.Dir = dir cmd.Env = envForDaemon(i) setupOpt(cmd) stdout, err := os.Create(path.Join(dir, "daemon.stdout")) if err != nil { return err } stderr, err := os.Create(path.Join(dir, "daemon.stderr")) if err != nil { return err } cmd.Stdout = stdout cmd.Stderr = stderr err = cmd.Start() if err != nil { return err } pid := cmd.Process.Pid fmt.Printf("Started daemon %d, pid = %d\n", i, pid) err = ioutil.WriteFile(path.Join(dir, "daemon.pid"), []byte(fmt.Sprint(pid)), 0666) if err != nil { return err } // Make sure node 0 is up before starting the rest so // bootstrapping works properly cfg, err := serial.Load(path.Join(IpfsDirN(i), "config")) if err != nil { return err } maddr := ma.StringCast(cfg.Addresses.API) _, addr, err := manet.DialArgs(maddr) if err != nil { return err } addrs = append(addrs, addr) err = waitOnAPI(cfg.Identity.PeerID, i) if err != nil { return err } } if waitall { for i := 0; i < n; i++ { err := waitOnSwarmPeers(i) if err != nil { return err } } } return nil }
package manet import ( "bytes" ma "github.com/ipfs/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multiaddr" ) // Loopback Addresses var ( // IP4Loopback is the ip4 loopback multiaddr IP4Loopback = ma.StringCast("/ip4/127.0.0.1") // IP6Loopback is the ip6 loopback multiaddr IP6Loopback = ma.StringCast("/ip6/::1") // IP6LinkLocalLoopback is the ip6 link-local loopback multiaddr IP6LinkLocalLoopback = ma.StringCast("/ip6/fe80::1") ) // Unspecified Addresses (used for ) var ( IP4Unspecified = ma.StringCast("/ip4/0.0.0.0") IP6Unspecified = ma.StringCast("/ip6/::") ) // IsThinWaist returns whether a Multiaddr starts with "Thin Waist" Protocols. // This means: /{IP4, IP6}[/{TCP, UDP}] func IsThinWaist(m ma.Multiaddr) bool { p := m.Protocols()