浏览代码

p2p: use an error type for disconnect requests

Test-tastic.
Felix Lange 11 年之前
父节点
当前提交
f0f6727778
共有 2 个文件被更改,包括 10 次插入2 次删除
  1. 9 0
      p2p/peer_error.go
  2. 1 2
      p2p/protocol.go

+ 9 - 0
p2p/peer_error.go

@@ -100,7 +100,16 @@ func (d DiscReason) String() string {
 	return discReasonToString[d]
 }
 
+type discRequestedError DiscReason
+
+func (err discRequestedError) Error() string {
+	return fmt.Sprintf("disconnect requested: %v", DiscReason(err))
+}
+
 func discReasonForError(err error) DiscReason {
+	if reason, ok := err.(discRequestedError); ok {
+		return DiscReason(reason)
+	}
 	peerError, ok := err.(*peerError)
 	if !ok {
 		return DiscSubprotocolError

+ 1 - 2
p2p/protocol.go

@@ -158,8 +158,7 @@ func (bp *baseProtocol) handle(rw MsgReadWriter) error {
 		if err := msg.Decode(&reason); err != nil {
 			return err
 		}
-		bp.peer.Disconnect(reason[0])
-		return nil
+		return discRequestedError(reason[0])
 
 	case pingMsg:
 		return bp.rw.EncodeMsg(pongMsg)