Skip to content

Commit df631fd

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 48cf0c7 commit df631fd

File tree

1 file changed

+31
-12
lines changed

1 file changed

+31
-12
lines changed

Diff for: connection.go

+31-12
Original file line numberDiff line numberDiff line change
@@ -581,43 +581,62 @@ 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) (err error) {
585585
var packet smallWBuf
586-
req := newAuthRequest(conn.opts.User, string(scramble))
587586
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
}
592591
if err := write(w, packet.b); err != nil {
593-
return errors.New("auth: write error " + err.Error())
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
}
598597
return
599598
}
600599

601-
func (conn *Connection) readAuthResponse(r io.Reader) (err error) {
600+
func (conn *Connection) writeAuthRequest(w *bufio.Writer, scramble []byte) (err 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
609+
}
610+
611+
func (conn *Connection) readResponse(r io.Reader) (resp Response, err error) {
602612
respBytes, err := conn.read(r)
603613
if err != nil {
604-
return errors.New("auth: read error " + err.Error())
614+
return resp, fmt.Errorf("read error %w", err)
605615
}
606-
resp := Response{buf: smallBuf{b: respBytes}}
616+
resp = Response{buf: smallBuf{b: respBytes}}
607617
err = resp.decodeHeader(conn.dec)
608618
if err != nil {
609-
return errors.New("auth: decode response header error " + err.Error())
619+
return resp, fmt.Errorf("decode response header error %w", err)
610620
}
611621
err = resp.decodeBody()
612622
if err != nil {
613623
switch err.(type) {
614624
case Error:
615-
return err
625+
return resp, err
616626
default:
617-
return errors.New("auth: decode response body error " + err.Error())
627+
return resp, fmt.Errorf("decode response body error %w", err)
618628
}
619629
}
620-
return
630+
return resp, nil
631+
}
632+
633+
func (conn *Connection) readAuthResponse(r io.Reader) (err error) {
634+
_, err = conn.readResponse(r)
635+
if err != nil {
636+
return fmt.Errorf("auth: %w", err)
637+
}
638+
639+
return nil
621640
}
622641

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

0 commit comments

Comments
 (0)