浏览代码

initial hook for crypto handshake (void, off by default)

zelig 10 年之前
父节点
当前提交
c8a8aa0d43
共有 1 个文件被更改,包括 26 次插入0 次删除
  1. 26 0
      p2p/peer.go

+ 26 - 0
p2p/peer.go

@@ -70,6 +70,7 @@ type Peer struct {
 	// These fields maintain the running protocols.
 	protocols       []Protocol
 	runBaseProtocol bool // for testing
+	cryptoHandshake bool // for testing
 
 	runlock sync.RWMutex // protects running
 	running map[string]*proto
@@ -141,6 +142,20 @@ func (p *Peer) Identity() ClientIdentity {
 	return p.identity
 }
 
+func (self *Peer) Pubkey() (pubkey []byte) {
+	self.infolock.Lock()
+	defer self.infolock.Unlock()
+	switch {
+	case self.identity != nil:
+		pubkey = self.identity.Pubkey()
+	case self.dialAddr != nil:
+		pubkey = self.dialAddr.Pubkey
+	case self.listenAddr != nil:
+		pubkey = self.listenAddr.Pubkey
+	}
+	return
+}
+
 // Caps returns the capabilities (supported subprotocols) of the remote peer.
 func (p *Peer) Caps() []Cap {
 	p.infolock.Lock()
@@ -207,6 +222,12 @@ func (p *Peer) loop() (reason DiscReason, err error) {
 	defer close(p.closed)
 	defer p.conn.Close()
 
+	if p.cryptoHandshake {
+		if err := p.handleCryptoHandshake(); err != nil {
+			return DiscProtocolError, err // no graceful disconnect
+		}
+	}
+
 	// read loop
 	readMsg := make(chan Msg)
 	readErr := make(chan error)
@@ -307,6 +328,11 @@ func (p *Peer) dispatch(msg Msg, protoDone chan struct{}) (wait bool, err error)
 	return wait, nil
 }
 
+func (p *Peer) handleCryptoHandshake() (err error) {
+
+	return nil
+}
+
 func (p *Peer) startBaseProtocol() {
 	p.runlock.Lock()
 	defer p.runlock.Unlock()