@@ -55,10 +55,10 @@ const (
55
55
// Stream abstracts the transport mechanics from the JSON RPC protocol.
56
56
type Stream interface {
57
57
// Read gets the next message from the stream.
58
- Read (ctx context.Context , p []byte ) ( n int , err error )
58
+ Read (ctx context.Context ) ( data []byte , err error )
59
59
60
60
// Write sends a message to the stream.
61
- Write (ctx context.Context , p []byte ) (n int , err error )
61
+ Write (ctx context.Context , data []byte ) (err error )
62
62
}
63
63
64
64
type stream struct {
@@ -74,18 +74,18 @@ func NewStream(in io.Reader, out io.Writer) Stream {
74
74
}
75
75
}
76
76
77
- func (s * stream ) Read (ctx context.Context , p []byte ) ( n int , err error ) {
77
+ func (s * stream ) Read (ctx context.Context ) ( []byte , error ) {
78
78
select {
79
79
case <- ctx .Done ():
80
- return 0 , ctx .Err ()
80
+ return nil , ctx .Err ()
81
81
default :
82
82
}
83
83
84
84
var length int64
85
85
for {
86
86
line , err := s .in .ReadString ('\n' )
87
87
if err != nil {
88
- return 0 , xerrors .Errorf ("failed reading header line: %w" , err )
88
+ return nil , xerrors .Errorf ("failed reading header line: %w" , err )
89
89
}
90
90
91
91
line = strings .TrimSpace (line )
@@ -95,7 +95,7 @@ func (s *stream) Read(ctx context.Context, p []byte) (n int, err error) {
95
95
96
96
colon := strings .IndexRune (line , ':' )
97
97
if colon < 0 {
98
- return 0 , xerrors .Errorf ("invalid header line: %q" , line )
98
+ return nil , xerrors .Errorf ("invalid header line: %q" , line )
99
99
}
100
100
101
101
name , value := line [:colon ], strings .TrimSpace (line [colon + 1 :])
@@ -104,40 +104,39 @@ func (s *stream) Read(ctx context.Context, p []byte) (n int, err error) {
104
104
}
105
105
106
106
if length , err = strconv .ParseInt (value , 10 , 32 ); err != nil {
107
- return 0 , xerrors .Errorf ("failed parsing Content-Length: %v" , value )
107
+ return nil , xerrors .Errorf ("failed parsing Content-Length: %v" , value )
108
108
}
109
109
110
110
if length <= 0 {
111
- return 0 , xerrors .Errorf ("invalid Content-Length: %v" , length )
111
+ return nil , xerrors .Errorf ("invalid Content-Length: %v" , length )
112
112
}
113
113
}
114
114
115
115
if length == 0 {
116
- return 0 , xerrors .New ("missing Content-Length header" )
116
+ return nil , xerrors .New ("missing Content-Length header" )
117
117
}
118
118
119
- p = make ([]byte , length )
120
- n , err = io .ReadFull (s .in , p )
121
- if err != nil {
122
- return 0 , xerrors .Errorf ("failed reading data: %w" , err )
119
+ data := make ([]byte , length )
120
+ if _ , err := io .ReadFull (s .in , data ); err != nil {
121
+ return nil , xerrors .Errorf ("failed reading data: %w" , err )
123
122
}
124
123
125
- return n , nil
124
+ return data , nil
126
125
}
127
126
128
- func (s * stream ) Write (ctx context.Context , p []byte ) (n int , err error ) {
127
+ func (s * stream ) Write (ctx context.Context , data []byte ) (err error ) {
129
128
select {
130
129
case <- ctx .Done ():
131
- return 0 , ctx .Err ()
130
+ return ctx .Err ()
132
131
default :
133
132
}
134
133
135
134
s .Lock ()
136
- n , err = fmt .Fprintf (s .out , HeaderContentLengthFmt + HeaderContentTypeFmt + HeaderContentSeparator , len (p ), ContentTypeJSONRPC )
135
+ _ , err = fmt .Fprintf (s .out , HeaderContentLengthFmt + HeaderContentTypeFmt + HeaderContentSeparator , len (data ), ContentTypeJSONRPC )
137
136
if err == nil {
138
- n , err = s .out .Write (p )
137
+ _ , err = s .out .Write (data )
139
138
}
140
139
s .Unlock ()
141
140
142
- return n , err
141
+ return err
143
142
}
0 commit comments