コード例 #1
0
ファイル: mex.go プロジェクト: hustxiaoc/tchannel
// 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
	}
}
コード例 #2
0
ファイル: messages.go プロジェクト: jammyluo/tchannel
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()
}
コード例 #3
0
ファイル: tracing.go プロジェクト: kotakondavinay/tchannel
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()
}
コード例 #4
0
ファイル: messages.go プロジェクト: jammyluo/tchannel
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
	}
}
コード例 #5
0
ファイル: messages.go プロジェクト: benfleis/tchannel
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
	}
}
コード例 #6
0
ファイル: frame.go プロジェクト: shawnburke/tchannel
// 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
}
コード例 #7
0
ファイル: messages.go プロジェクト: jammyluo/tchannel
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()
}
コード例 #8
0
ファイル: messages.go プロジェクト: jammyluo/tchannel
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()
}
コード例 #9
0
ファイル: frame.go プロジェクト: shawnburke/tchannel
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()
}
コード例 #10
0
ファイル: frame.go プロジェクト: shawnburke/tchannel
func (f *Frame) read(msg message) error {
	var rbuf typed.ReadBuffer
	rbuf.Wrap(f.SizedPayload())
	return msg.read(&rbuf)
}
コード例 #11
0
ファイル: messages.go プロジェクト: jammyluo/tchannel
func (m *errorMessage) read(r *typed.ReadBuffer) error {
	m.errCode = SystemErrCode(r.ReadByte())
	m.id = r.ReadUint32()
	m.message = r.ReadLen16String()
	return r.Err()
}
コード例 #12
0
ファイル: messages.go プロジェクト: benfleis/tchannel
func (m *errorMessage) read(r *typed.ReadBuffer) error {
	m.errCode = SystemErrCode(r.ReadSingleByte())
	m.tracing.read(r)
	m.message = r.ReadLen16String()
	return r.Err()
}