tendermint/peer/pex.go
2014-07-06 00:16:05 -07:00

68 lines
1.1 KiB
Go

package peer
import (
. "github.com/tendermint/tendermint/binary"
"io"
)
const pexCh = "PEX"
func peerExchangeHandler(c *Client) {
for {
// inPkt := c.Receive(pexCh) // {Peer, Time, Packet}
// decode message
// if message is a peer request
// if message is
}
// cleanup
}
/* Messages */
const (
pexTypeRequest = Byte(0x00)
pexTypeResponse = Byte(0x01)
)
func decodeMsg(bytes ByteSlice) (t Byte, msg Message) {
//return pexTypeRequest, nil
return pexTypeResponse, nil
}
/*
A response with peer addresses
*/
type pexResponseMsg struct {
Addrs []*NetAddress
}
func readPexResponseMsg(r io.Reader) *pexResponseMsg {
numAddrs := int(ReadUInt32(r))
addrs := []*NetAddress{}
for i := 0; i < numAddrs; i++ {
addr := ReadNetAddress(r)
addrs = append(addrs, addr)
}
return &pexResponseMsg{
Addrs: addrs,
}
}
func (m *pexResponseMsg) WriteTo(w io.Writer) (n int64, err error) {
n, err = WriteOnto(UInt32(len(m.Addrs)), w, n, err)
for _, addr := range m.Addrs {
n, err = WriteOnto(addr, w, n, err)
}
return
}
func (m *pexResponseMsg) Type() string {
return "pexTypeResponse"
}