Skip to content

Commit 71ce8d1

Browse files
internal: raw request sending functions
Auth requests are sent before connection event loop initialization. It would be useful to be able to send IPROTO_ID requests in the same way. Part of #120
1 parent 7e86795 commit 71ce8d1

File tree

1 file changed

+34
-14
lines changed

1 file changed

+34
-14
lines changed

Diff for: connection.go

+34-14
Original file line numberDiff line numberDiff line change
@@ -581,43 +581,63 @@ func pack(h *smallWBuf, enc *encoder, reqid uint32,
581581
return
582582
}
583583

584-
func (conn *Connection) writeAuthRequest(w *bufio.Writer, scramble []byte) (err error) {
584+
func (conn *Connection) writeRequest(w *bufio.Writer, req Request) error {
585585
var packet smallWBuf
586-
req := newAuthRequest(conn.opts.User, string(scramble))
587-
err = pack(&packet, newEncoder(&packet), 0, req, ignoreStreamId, conn.Schema)
586+
err := pack(&packet, newEncoder(&packet), 0, req, ignoreStreamId, conn.Schema)
588587

589588
if err != nil {
590-
return errors.New("auth: pack error " + err.Error())
589+
return fmt.Errorf("pack error: %w", err)
591590
}
592-
if err := write(w, packet.b); err != nil {
593-
return errors.New("auth: write error " + err.Error())
591+
if err = write(w, packet.b); err != nil {
592+
return fmt.Errorf("write error: %w", err)
594593
}
595594
if err = w.Flush(); err != nil {
596-
return errors.New("auth: flush error " + err.Error())
595+
return fmt.Errorf("flush error: %w", err)
597596
}
598-
return
597+
return err
598+
}
599+
600+
func (conn *Connection) writeAuthRequest(w *bufio.Writer, scramble []byte) error {
601+
req := newAuthRequest(conn.opts.User, string(scramble))
602+
603+
err := conn.writeRequest(w, req)
604+
if err != nil {
605+
return fmt.Errorf("auth: %w", err)
606+
}
607+
608+
return nil
599609
}
600610

601-
func (conn *Connection) readAuthResponse(r io.Reader) (err error) {
611+
func (conn *Connection) readResponse(r io.Reader) (Response, error) {
602612
respBytes, err := conn.read(r)
603613
if err != nil {
604-
return errors.New("auth: read error " + err.Error())
614+
return Response{}, fmt.Errorf("read error: %w", err)
605615
}
616+
606617
resp := Response{buf: smallBuf{b: respBytes}}
607618
err = resp.decodeHeader(conn.dec)
608619
if err != nil {
609-
return errors.New("auth: decode response header error " + err.Error())
620+
return resp, fmt.Errorf("decode response header error: %w", err)
610621
}
611622
err = resp.decodeBody()
612623
if err != nil {
613624
switch err.(type) {
614625
case Error:
615-
return err
626+
return resp, err
616627
default:
617-
return errors.New("auth: decode response body error " + err.Error())
628+
return resp, fmt.Errorf("decode response body error: %w", err)
618629
}
619630
}
620-
return
631+
return resp, nil
632+
}
633+
634+
func (conn *Connection) readAuthResponse(r io.Reader) error {
635+
_, err := conn.readResponse(r)
636+
if err != nil {
637+
return fmt.Errorf("auth: %w", err)
638+
}
639+
640+
return nil
621641
}
622642

623643
func (conn *Connection) createConnection(reconnect bool) (err error) {

0 commit comments

Comments
 (0)