Merge pull request #407 from awh/369_name_weave_peers

nicknames for weave peers

Closes #369.
This commit is contained in:
rade committed 2015-02-25 18:10:36 +00:00
commit d1400bc233
13 files changed
+84 -45

No files matched your search

+5 -5
View File
@@ -19,7 +19,7 @@ type mockChannelConnection struct {
// We need to create some dummy channels otherwise tests hang on nil
// channels when Router.OnGossip() calls async methods.
func NewTestRouter(name PeerName) *Router {
router := NewRouter(nil, name, nil, 10, 1024, nil)
router := NewRouter(nil, name, "", nil, 10, 1024, nil)
router.ConnectionMaker.queryChan = make(chan *ConnectionMakerInteraction, ChannelSize)
router.Routes.queryChan = make(chan *Interaction, ChannelSize)
return router
@@ -35,8 +35,8 @@ func (router *Router) AddTestChannelConnection(r *Router) {
fromName := router.Ourself.Peer.Name
toName := r.Ourself.Peer.Name
fromPeer := NewPeer(fromName, router.Ourself.Peer.UID, 0)
toPeer := NewPeer(toName, r.Ourself.Peer.UID, 0)
fromPeer := NewPeer(fromName, "", router.Ourself.Peer.UID, 0)
toPeer := NewPeer(toName, "", r.Ourself.Peer.UID, 0)
r.Peers.FetchWithDefault(fromPeer) // Has side-effect of incrementing refcount
router.Peers.FetchWithDefault(toPeer) //
@@ -70,10 +70,10 @@ func TestGossipTopology(t *testing.T) {
// the routers supplied as arguments, carrying across all UID and
// version information.
func (router *Router) tp(routers ...*Router) *Peer {
peer := NewPeer(router.Ourself.Peer.Name, router.Ourself.Peer.UID, 0)
peer := NewPeer(router.Ourself.Peer.Name, "", router.Ourself.Peer.UID, 0)
connections := make(map[PeerName]Connection)
for _, r := range routers {
p := NewPeer(r.Ourself.Peer.Name, r.Ourself.Peer.UID, r.Ourself.Peer.version)
p := NewPeer(r.Ourself.Peer.Name, "", r.Ourself.Peer.UID, r.Ourself.Peer.version)
connections[r.Ourself.Peer.Name] = newMockConnection(peer, p)
}
peer.SetVersionAndConnections(router.Ourself.Peer.version, connections)
+3 -1
View File
@@ -59,6 +59,7 @@ func (conn *LocalConnection) handshake(enc *gob.Encoder, dec *gob.Decoder, accep
"ProtocolVersion": versionStr,
"PeerNameFlavour": PeerNameFlavour,
"Name": conn.local.Name.String(),
"NickName": conn.local.NickName,
"UID": fmt.Sprint(conn.local.UID),
"ConnID": fmt.Sprint(localConnID)}
handshakeRecv := map[string]string{}
@@ -84,6 +85,7 @@ func (conn *LocalConnection) handshake(enc *gob.Encoder, dec *gob.Decoder, accep
fv.CheckEqual("ProtocolVersion", versionStr)
fv.CheckEqual("PeerNameFlavour", PeerNameFlavour)
nameStr, _ := fv.Value("Name")
nickNameStr, _ := fv.Value("NickName")
uidStr, _ := fv.Value("UID")
remoteConnIdStr, _ := fv.Value("ConnID")
if err := fv.Err(); err != nil {
@@ -136,7 +138,7 @@ func (conn *LocalConnection) handshake(enc *gob.Encoder, dec *gob.Decoder, accep
conn.Decryptor = NewNonDecryptor(conn)
}
toPeer := NewPeer(name, uid, 0)
toPeer := NewPeer(name, nickNameStr, uid, 0)
toPeer = conn.Router.Peers.FetchWithDefault(toPeer)
switch toPeer {
case nil:
+2 -2
View File
@@ -18,8 +18,8 @@ type PeerInteraction struct {
payload interface{}
}
func NewLocalPeer(name PeerName, router *Router) *LocalPeer {
return &LocalPeer{Peer: NewPeer(name, 0, 0), Router: router}
func NewLocalPeer(name PeerName, nickName string, router *Router) *LocalPeer {
return &LocalPeer{Peer: NewPeer(name, nickName, 0, 0), Router: router}
}
func (peer *LocalPeer) Start() {
+3 -3
View File
@@ -12,7 +12,7 @@ import (
// Add to peers a connection from peers.ourself to p
func (peers *Peers) AddTestConnection(p *Peer) {
toPeer := NewPeer(p.Name, p.UID, 0)
toPeer := NewPeer(p.Name, "", p.UID, 0)
peers.FetchWithDefault(toPeer) // Has side-effect of incrementing refcount
conn := newMockConnection(peers.ourself, toPeer)
peers.ourself.addConnection(conn)
@@ -22,10 +22,10 @@ func (peers *Peers) AddTestConnection(p *Peer) {
// Add to peers a connection from p1 to p2
func (peers *Peers) AddTestRemoteConnection(p1, p2 *Peer) {
fromName := p1.Name
fromPeer := NewPeer(fromName, p1.UID, 0)
fromPeer := NewPeer(fromName, "", p1.UID, 0)
fromPeer = peers.FetchWithDefault(fromPeer)
toName := p2.Name
toPeer := NewPeer(toName, p2.UID, 0)
toPeer := NewPeer(toName, "", p2.UID, 0)
toPeer = peers.FetchWithDefault(toPeer)
peers.ourself.addConnection(&RemoteConnection{fromPeer, toPeer, "", false})
}
+4 -2
View File
@@ -10,19 +10,21 @@ type Peer struct {
sync.RWMutex
Name PeerName
NameByte []byte
NickName string
UID uint64
version uint64
localRefCount uint64
connections map[PeerName]Connection
}
func NewPeer(name PeerName, uid uint64, version uint64) *Peer {
func NewPeer(name PeerName, nickName string, uid uint64, version uint64) *Peer {
if uid == 0 {
uid = randUint64()
}
return &Peer{
Name: name,
NameByte: name.Bin(),
NickName: nickName,
UID: uid,
version: version,
connections: make(map[PeerName]Connection)}
@@ -31,7 +33,7 @@ func NewPeer(name PeerName, uid uint64, version uint64) *Peer {
func (peer *Peer) String() string {
peer.RLock()
defer peer.RUnlock()
return fmt.Sprint("Peer ", peer.Name, " (v", peer.version, ") (UID ", peer.UID, ")")
return fmt.Sprint("Peer ", peer.Name, " (", peer.NickName, ") (v", peer.version, ") (UID ", peer.UID, ")")
}
func (peer *Peer) Version() uint64 {
+8 -4
View File
@@ -128,7 +128,7 @@ func (peers *Peers) String() string {
if !conn.Established() {
established = " (unestablished)"
}
buf.WriteString(fmt.Sprintf(" -> %v [%v%s]\n", remoteName, conn.RemoteTCPAddr(), established))
buf.WriteString(fmt.Sprintf(" -> %v (%v) [%v%s]\n", remoteName, conn.Remote().NickName, conn.RemoteTCPAddr(), established))
})
})
return buf.String()
@@ -178,7 +178,7 @@ func (peers *Peers) decodeUpdate(update []byte) (newPeers map[PeerName]*Peer, de
decoder := gob.NewDecoder(updateBuf)
for {
nameByte, uid, version, connsBuf, decErr := decodePeerNoConns(decoder)
nameByte, nickName, uid, version, connsBuf, decErr := decodePeerNoConns(decoder)
if decErr == io.EOF {
break
} else if decErr != nil {
@@ -186,7 +186,7 @@ func (peers *Peers) decodeUpdate(update []byte) (newPeers map[PeerName]*Peer, de
return
}
name := PeerNameFromBin(nameByte)
newPeer := NewPeer(name, uid, version)
newPeer := NewPeer(name, nickName, uid, version)
decodedUpdate = append(decodedUpdate, newPeer)
decodedConns = append(decodedConns, connsBuf)
existingPeer, found := peers.table[name]
@@ -257,6 +257,7 @@ func (peer *Peer) encode(enc *gob.Encoder) {
defer peer.RUnlock()
checkFatal(enc.Encode(peer.NameByte))
checkFatal(enc.Encode(peer.NickName))
checkFatal(enc.Encode(peer.UID))
checkFatal(enc.Encode(peer.version))
@@ -271,10 +272,13 @@ func (peer *Peer) encode(enc *gob.Encoder) {
checkFatal(enc.Encode(connsBuf.Bytes()))
}
func decodePeerNoConns(dec *gob.Decoder) (nameByte []byte, uid uint64, version uint64, conns []byte, err error) {
func decodePeerNoConns(dec *gob.Decoder) (nameByte []byte, nickName string, uid uint64, version uint64, conns []byte, err error) {
if err = dec.Decode(&nameByte); err != nil {
return
}
if err = dec.Decode(&nickName); err != nil {
return
}
if err = dec.Decode(&uid); err != nil {
return
}
+1 -1
View File
@@ -17,7 +17,7 @@ import (
// - non-gc of peers that are only referenced locally
func newNode(name PeerName) (*Peer, *Peers) {
peer := NewPeer(name, 0, 0)
peer := NewPeer(name, "", 0, 0)
peers := NewPeers(peer, func(*Peer) {})
peers.FetchWithDefault(peer)
return peer, peers
+1 -1
View File
@@ -2,7 +2,7 @@ package router
const (
Protocol = "weave"
ProtocolVersion = 12
ProtocolVersion = 13
)
type ProtocolTag byte
+3 -3
View File
@@ -46,7 +46,7 @@ type PacketSourceSink interface {
PacketSink
}
func NewRouter(iface *net.Interface, name PeerName, password []byte, connLimit int, bufSz int, logFrame func(string, []byte, *layers.Ethernet)) *Router {
func NewRouter(iface *net.Interface, name PeerName, nickName string, password []byte, connLimit int, bufSz int, logFrame func(string, []byte, *layers.Ethernet)) *Router {
router := &Router{
Iface: iface,
GossipChannels: make(map[uint32]*GossipChannel),
@@ -63,7 +63,7 @@ func NewRouter(iface *net.Interface, name PeerName, password []byte, connLimit i
router.Macs.Delete(peer)
log.Println("Removed unreachable", peer)
}
router.Ourself = NewLocalPeer(name, router)
router.Ourself = NewLocalPeer(name, nickName, router)
router.Macs = NewMacCache(macMaxAge, onMacExpiry)
router.Peers = NewPeers(router.Ourself.Peer, onPeerGC)
router.Peers.FetchWithDefault(router.Ourself.Peer)
@@ -94,7 +94,7 @@ func (router *Router) UsingPassword() bool {
func (router *Router) Status() string {
var buf bytes.Buffer
buf.WriteString(fmt.Sprintln("Our name is", router.Ourself.Name))
buf.WriteString(fmt.Sprintln("Our name is", router.Ourself.Name, "(" + router.Ourself.NickName + ")"))
buf.WriteString(fmt.Sprintln("Sniffing traffic on", router.Iface))
buf.WriteString(fmt.Sprintf("MACs:\n%s", router.Macs))
buf.WriteString(fmt.Sprintf("Peers:\n%s", router.Peers))