Skip to content

Commit b04cf49

Browse files
committed
test pass done.
1 parent cb3cf06 commit b04cf49

File tree

2 files changed

+36
-4
lines changed

2 files changed

+36
-4
lines changed

xio/frame/frame.go

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ func (b *BaseHeader) ReadHead(buffer []byte) (length uint32) {
138138
case 1:
139139
length = uint32(buffer[uint32(b.LengthFieldOffset)]) - uint32(b.LengthAdjustment)
140140
case 2:
141-
length = uint32(b.ByteOrder.Uint16(buffer[+uint32(b.LengthFieldOffset):])) - uint32(b.LengthAdjustment)
141+
length = uint32(b.ByteOrder.Uint16(buffer[uint32(b.LengthFieldOffset):])) - uint32(b.LengthAdjustment)
142142
case 4:
143143
length = uint32(b.ByteOrder.Uint32(buffer[uint32(b.LengthFieldOffset):])) - uint32(b.LengthAdjustment)
144144
default:
@@ -749,6 +749,34 @@ func NewPassReadWriteCloser(header Header, raw io.ReadWriteCloser, bufferSize in
749749
return
750750
}
751751

752+
func NewPassReadWriter(header Header, raw io.ReadWriter, bufferSize int) (pass *PassReadWriteCloser) {
753+
if bufferSize < 1 {
754+
panic("buffer size is < 1")
755+
}
756+
if header == nil {
757+
header = NewDefaultHeader()
758+
} else {
759+
header = CloneHeader(header)
760+
}
761+
closer, _ := raw.(io.Closer)
762+
pass = &PassReadWriteCloser{
763+
Closer: closer,
764+
PassReadCloser: NewPassReader(raw),
765+
PassWriteCloser: NewPassWriter(raw, bufferSize),
766+
}
767+
pass.Header = header
768+
pass.PassReadCloser.Header = header
769+
pass.PassWriteCloser.Header = header
770+
return
771+
}
772+
773+
func (r *PassReadWriteCloser) Close() (err error) {
774+
if r.Closer != nil {
775+
err = r.Closer.Close()
776+
}
777+
return
778+
}
779+
752780
type PassWriteCloser struct {
753781
Header
754782
io.Writer
@@ -785,6 +813,10 @@ func (w *PassWriteCloser) readFrame(header uint32, buffer []byte) (size uint32,
785813
return
786814
}
787815
frameLength := w.ReadHead(buffer)
816+
if frameLength < 1 {
817+
err = fmt.Errorf("head is zero")
818+
return
819+
}
788820
if frameLength > uint32(len(w.buffer)) {
789821
err = ErrFrameTooLarge
790822
return
@@ -873,7 +905,7 @@ func NewPassReadCloser(from io.ReadCloser) (reader *PassReadCloser) {
873905
return
874906
}
875907

876-
func NewWrapReader(from io.Reader) (reader *PassReadCloser) {
908+
func NewPassReader(from io.Reader) (reader *PassReadCloser) {
877909
reader = &PassReadCloser{
878910
Header: NewDefaultHeader(),
879911
Reader: from,

xio/frame/frame_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -616,7 +616,7 @@ func TestPass(t *testing.T) {
616616
if tester.Run() {
617617
buffer := make([]byte, 1024)
618618
data := bytes.NewBuffer([]byte("abc"))
619-
wrapper := NewWrapReader(data)
619+
wrapper := NewPassReader(data)
620620
reader := NewBaseReader(wrapper, 1024)
621621
n, err := reader.Read(buffer)
622622
if err != nil || string(buffer[0:n]) != "abc" {
@@ -625,7 +625,7 @@ func TestPass(t *testing.T) {
625625
}
626626
wrapper.Close()
627627
NewPassReadCloser(NewRawReadWriteCloser(nil, nil, 1024))
628-
wrapper = NewWrapReader(NewRawReadWriteCloser(nil, nil, 1024))
628+
wrapper = NewPassReader(NewRawReadWriteCloser(nil, nil, 1024))
629629
wrapper.Close()
630630
}
631631
//

0 commit comments

Comments
 (0)