func (bs *BitSwap) getLedger(p *peer.Peer) *Ledger { l, ok := bs.partners[p.Key()] if ok { return l } l = new(Ledger) l.Strategy = bs.strategy l.Partner = p bs.partners[p.Key()] = l return l }
// Dial connects to a peer. // // The idea is that the client of Swarm does not need to know what network // the connection will happen over. Swarm can use whichever it choses. // This allows us to use various transport protocols, do NAT traversal/relay, // etc. to achive connection. // // For now, Dial uses only TCP. This will be extended. func (s *Swarm) Dial(peer *peer.Peer) (*Conn, error) { k := peer.Key() // check if we already have an open connection first s.connsLock.RLock() conn, found := s.conns[k] s.connsLock.RUnlock() if found { return conn, nil } // open connection to peer conn, err := Dial("tcp", peer) if err != nil { return nil, err } // add to conns s.connsLock.Lock() s.conns[k] = conn s.connsLock.Unlock() // kick off reader goroutine go s.fanIn(conn) return conn, nil }
// Dial connects to a peer. // // The idea is that the client of Swarm does not need to know what network // the connection will happen over. Swarm can use whichever it choses. // This allows us to use various transport protocols, do NAT traversal/relay, // etc. to achive connection. // // For now, Dial uses only TCP. This will be extended. func (s *Swarm) Dial(peer *peer.Peer) (*Conn, error, bool) { k := peer.Key() // check if we already have an open connection first s.connsLock.RLock() conn, found := s.conns[k] s.connsLock.RUnlock() if found { return conn, nil, true } // open connection to peer conn, err := Dial("tcp", peer) if err != nil { return nil, err, false } return conn, nil, false }