func (s *Server) handleHandshake(conn *Conn, msg *protocol.Message) { handshake := msg.GetHandshake() conn.Peer = handshake.GetSender() s.peersLock.RLock() peer := s.Peers[conn.Peer.Id] s.peersLock.RUnlock() if peer != nil { s.Printf("Ignoring duplicate peer %s.", conn.PrettyID()) if err := conn.Close(); err != nil && err != io.EOF { s.Printf("ERR closing connection %s", err) } return } s.peersLock.Lock() s.Peers[conn.Peer.Id] = conn s.peersLock.Unlock() s.Print(color.GreenString("New peer %s", conn.PrettyID())) if !handshake.Response { if err := s.sendHandshake(conn, true); err != nil { s.Printf("ERR sendHandshake %s", err) } } else { if err := s.sendPeerRequest(conn); err != nil { s.Printf("ERR sendPeerRequest %s", err) } } go s.connHeartbeat(conn) }
func (s *Server) handleHandshake(conn *Conn, msg *protocol.Message) { handshake := msg.GetHandshake() conn.Peer = handshake.GetSender() s.Peers[conn.Peer.Id] = conn s.Printf("New peer %s", conn.Peer.Id) if !handshake.Response { if err := s.sendHandshake(conn, true); err != nil { log.Printf("ERR sendHandshake %s", err) } } else { msg := &protocol.Message{Message: &protocol.Message_PeerRequest{ PeerRequest: &protocol.PeerRequest{ Limit: -1, //Keyspace: s.LocalPeer().Keyspace, }}} if err := conn.Send(msg); err != nil { log.Printf("ERR sending PeerRequest: %s", err) } } }