Use bufio.Reader in (*Client).Do

This commit is contained in:
adnano 2020-09-21 17:58:36 -04:00
parent e6f70cf697
commit fd74b8fbe9

View File

@ -1,6 +1,7 @@
package gemini package gemini
import ( import (
"bufio"
"crypto/tls" "crypto/tls"
"errors" "errors"
"io/ioutil" "io/ioutil"
@ -99,9 +100,11 @@ func (c *Client) Do(req *Request) (*Response, error) {
return nil, err return nil, err
} }
buf := bufio.NewReader(conn)
// Read the response header // Read the response header
code := make([]byte, 2) code := make([]byte, 2)
if _, err := conn.Read(code); err != nil { if _, err := buf.Read(code); err != nil {
return nil, err return nil, err
} }
status, err := strconv.Atoi(string(code)) status, err := strconv.Atoi(string(code))
@ -110,22 +113,20 @@ func (c *Client) Do(req *Request) (*Response, error) {
} }
// Read one space // Read one space
space := make([]byte, 1) if space, err := buf.ReadByte(); err != nil {
if _, err := conn.Read(space); err != nil {
return nil, err return nil, err
} } else if space != ' ' {
if space[0] != ' ' {
return nil, ErrProtocol return nil, ErrProtocol
} }
// Read the meta // Read the meta
meta, err := readLine(conn) meta, err := readLine(buf)
if err != nil { if err != nil {
return nil, err return nil, err
} }
// Read the response body // Read the response body
body, err := ioutil.ReadAll(conn) body, err := ioutil.ReadAll(buf)
if err != nil { if err != nil {
return nil, err return nil, err
} }