mirror of
https://github.com/octoleo/syncthing.git
synced 2025-02-02 11:58:28 +00:00
Clean up error handling a bit in protocol.readMessage
This commit is contained in:
parent
ae36fada6b
commit
eb55d19786
@ -430,36 +430,20 @@ func (c *rawConnection) readMessage() (hdr header, msg encodable, err error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// We check each returned error for the XDRError.IsEOF() method.
|
|
||||||
// IsEOF()==true here means that the message contained fewer fields than
|
|
||||||
// expected. It does not signify an EOF on the socket, because we've
|
|
||||||
// successfully read a size value and that many bytes already. New fields
|
|
||||||
// we expected but the other peer didn't send should be interpreted as
|
|
||||||
// zero/nil, and if that's not valid we'll verify it somewhere else.
|
|
||||||
|
|
||||||
switch hdr.msgType {
|
switch hdr.msgType {
|
||||||
case messageTypeIndex, messageTypeIndexUpdate:
|
case messageTypeIndex, messageTypeIndexUpdate:
|
||||||
var idx IndexMessage
|
var idx IndexMessage
|
||||||
err = idx.UnmarshalXDR(msgBuf)
|
err = idx.UnmarshalXDR(msgBuf)
|
||||||
if xdrErr, ok := err.(isEofer); ok && xdrErr.IsEOF() {
|
|
||||||
err = nil
|
|
||||||
}
|
|
||||||
msg = idx
|
msg = idx
|
||||||
|
|
||||||
case messageTypeRequest:
|
case messageTypeRequest:
|
||||||
var req RequestMessage
|
var req RequestMessage
|
||||||
err = req.UnmarshalXDR(msgBuf)
|
err = req.UnmarshalXDR(msgBuf)
|
||||||
if xdrErr, ok := err.(isEofer); ok && xdrErr.IsEOF() {
|
|
||||||
err = nil
|
|
||||||
}
|
|
||||||
msg = req
|
msg = req
|
||||||
|
|
||||||
case messageTypeResponse:
|
case messageTypeResponse:
|
||||||
var resp ResponseMessage
|
var resp ResponseMessage
|
||||||
err = resp.UnmarshalXDR(msgBuf)
|
err = resp.UnmarshalXDR(msgBuf)
|
||||||
if xdrErr, ok := err.(isEofer); ok && xdrErr.IsEOF() {
|
|
||||||
err = nil
|
|
||||||
}
|
|
||||||
msg = resp
|
msg = resp
|
||||||
|
|
||||||
case messageTypePing:
|
case messageTypePing:
|
||||||
@ -468,23 +452,28 @@ func (c *rawConnection) readMessage() (hdr header, msg encodable, err error) {
|
|||||||
case messageTypeClusterConfig:
|
case messageTypeClusterConfig:
|
||||||
var cc ClusterConfigMessage
|
var cc ClusterConfigMessage
|
||||||
err = cc.UnmarshalXDR(msgBuf)
|
err = cc.UnmarshalXDR(msgBuf)
|
||||||
if xdrErr, ok := err.(isEofer); ok && xdrErr.IsEOF() {
|
|
||||||
err = nil
|
|
||||||
}
|
|
||||||
msg = cc
|
msg = cc
|
||||||
|
|
||||||
case messageTypeClose:
|
case messageTypeClose:
|
||||||
var cm CloseMessage
|
var cm CloseMessage
|
||||||
err = cm.UnmarshalXDR(msgBuf)
|
err = cm.UnmarshalXDR(msgBuf)
|
||||||
if xdrErr, ok := err.(isEofer); ok && xdrErr.IsEOF() {
|
|
||||||
err = nil
|
|
||||||
}
|
|
||||||
msg = cm
|
msg = cm
|
||||||
|
|
||||||
default:
|
default:
|
||||||
err = fmt.Errorf("protocol error: %s: unknown message type %#x", c.id, hdr.msgType)
|
err = fmt.Errorf("protocol error: %s: unknown message type %#x", c.id, hdr.msgType)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// We check the returned error for the XDRError.IsEOF() method.
|
||||||
|
// IsEOF()==true here means that the message contained fewer fields than
|
||||||
|
// expected. It does not signify an EOF on the socket, because we've
|
||||||
|
// successfully read a size value and then that many bytes from the wire.
|
||||||
|
// New fields we expected but the other peer didn't send should be
|
||||||
|
// interpreted as zero/nil, and if that's not valid we'll verify it
|
||||||
|
// somewhere else.
|
||||||
|
if xdrErr, ok := err.(isEofer); ok && xdrErr.IsEOF() {
|
||||||
|
err = nil
|
||||||
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user