Merge pull request #401 from iamqizhao/master
some cleanup
diff --git a/rpc_util.go b/rpc_util.go
index f7d0ea5..5394034 100644
--- a/rpc_util.go
+++ b/rpc_util.go
@@ -128,19 +128,14 @@
s io.Reader
}
-// msgFixedHeader defines the header of a gRPC message. Find more detail
-// at http://www.grpc.io/docs/guides/wire.html.
-type msgFixedHeader struct {
- T payloadFormat
- Length uint32
-}
-
// recvMsg is to read a complete gRPC message from the stream. It is blocking if
// the message has not been complete yet. It returns the message and its type,
// EOF is returned with nil msg and 0 pf if the entire stream is done. Other
// non-nil error is returned if something is wrong on reading.
func (p *parser) recvMsg() (pf payloadFormat, msg []byte, err error) {
- var buf [5]byte // see msgFixedHeader
+ // The header of a gRPC message. Find more detail
+ // at http://www.grpc.io/docs/guides/wire.html.
+ var buf [5]byte
if _, err := io.ReadFull(p.s, buf[:]); err != nil {
return 0, nil, err
@@ -169,7 +164,7 @@
// Write message into the fixed header.
buf.WriteByte(uint8(pf))
var b []byte
- var length int
+ var length uint32
if msg != nil {
var err error
// TODO(zhaoq): optimize to reduce memory alloc and copying.
@@ -177,13 +172,13 @@
if err != nil {
return nil, err
}
- length = len(b)
+ length = uint32(len(b))
}
if length > math.MaxUint32 {
return nil, Errorf(codes.InvalidArgument, "grpc: message too large (%d bytes)", length)
}
var szHdr [4]byte
- binary.BigEndian.PutUint32(szHdr[:], uint32(length))
+ binary.BigEndian.PutUint32(szHdr[:], length)
buf.Write(szHdr[:])
buf.Write(b)
return buf.Bytes(), nil
@@ -258,6 +253,8 @@
// toRPCErr converts an error into a rpcError.
func toRPCErr(err error) error {
switch e := err.(type) {
+ case rpcError:
+ return err
case transport.StreamError:
return rpcError{
code: e.Code,