// recvPeerFrameOfType waits for a new frame of a given type from the peer, failing // if the next frame received is not of that type func (mex *messageExchange) recvPeerFrameOfType(msgType messageType) (*Frame, error) { frame, err := mex.recvPeerFrame() if err != nil { return nil, err } switch frame.Header.messageType { case msgType: return frame, nil case messageTypeError: errMsg := errorMessage{ id: frame.Header.ID, } var rbuf typed.ReadBuffer rbuf.Wrap(frame.SizedPayload()) if err := errMsg.read(&rbuf); err != nil { return nil, err } return nil, errMsg.AsSystemError() default: // TODO(mmihic): Should be treated as a protocol error mex.mexset.log.Warnf("Received unexpected message %d for %d", int(frame.Header.messageType), frame.Header.ID) return nil, errUnexpectedFrameType } }
func (m *callRes) read(r *typed.ReadBuffer) error { m.ResponseCode = ResponseCode(r.ReadByte()) m.Tracing.read(r) m.Headers = callHeaders{} m.Headers.read(r) return r.Err() }
func (s *Span) read(r *typed.ReadBuffer) error { s.traceID = r.ReadUint64() s.parentID = r.ReadUint64() s.spanID = r.ReadUint64() s.flags = r.ReadSingleByte() return r.Err() }
func (ch callHeaders) read(r *typed.ReadBuffer) { nh := r.ReadByte() for i := 0; i < int(nh); i++ { k := r.ReadLen8String() v := r.ReadLen8String() ch[CallHeaderName(k)] = v } }
func (ch transportHeaders) read(r *typed.ReadBuffer) { nh := r.ReadSingleByte() for i := 0; i < int(nh); i++ { k := r.ReadLen8String() v := r.ReadLen8String() ch[TransportHeaderName(k)] = v } }
// ReadIn reads the frame from the given io.Reader func (f *Frame) ReadIn(r io.Reader) error { var rbuf typed.ReadBuffer rbuf.Wrap(f.headerBuffer) if _, err := rbuf.FillFrom(r, FrameHeaderSize); err != nil { return err } if err := f.Header.read(&rbuf); err != nil { return err } if f.Header.PayloadSize() > 0 { if _, err := io.ReadFull(r, f.SizedPayload()); err != nil { return err } } return nil }
func (m *initMessage) read(r *typed.ReadBuffer) error { m.Version = r.ReadUint16() m.initParams = initParams{} np := r.ReadUint16() for i := 0; i < int(np); i++ { k := r.ReadLen16String() v := r.ReadLen16String() m.initParams[k] = v } return r.Err() }
func (m *callReq) read(r *typed.ReadBuffer) error { m.TimeToLive = time.Duration(r.ReadUint32()) * time.Millisecond m.Tracing.read(r) m.Service = r.ReadLen8String() m.Headers = callHeaders{} m.Headers.read(r) return r.Err() }
func (fh *FrameHeader) read(r *typed.ReadBuffer) error { fh.size = r.ReadUint16() fh.messageType = messageType(r.ReadSingleByte()) fh.reserved1 = r.ReadSingleByte() fh.ID = r.ReadUint32() r.ReadBytes(len(fh.reserved)) return r.Err() }
func (f *Frame) read(msg message) error { var rbuf typed.ReadBuffer rbuf.Wrap(f.SizedPayload()) return msg.read(&rbuf) }
func (m *errorMessage) read(r *typed.ReadBuffer) error { m.errCode = SystemErrCode(r.ReadByte()) m.id = r.ReadUint32() m.message = r.ReadLen16String() return r.Err() }
func (m *errorMessage) read(r *typed.ReadBuffer) error { m.errCode = SystemErrCode(r.ReadSingleByte()) m.tracing.read(r) m.message = r.ReadLen16String() return r.Err() }