Files
LinkPort/internal/protocol/sqlserverproxy/execution.go
T

39 lines
734 B
Go

package sqlserverproxy
import (
"context"
"encoding/binary"
"io"
"linkport/internal/model"
"linkport/internal/protocol/transport"
)
func relayMeasured(ctx context.Context, w io.Writer, r io.Reader, q *model.ExecutionQueue) error {
login := true
for {
var header [8]byte
if _, err := io.ReadFull(r, header[:]); err != nil {
return err
}
if err := transport.Write(w, header[:]); err != nil {
return err
}
n := int64(binary.BigEndian.Uint16(header[2:4])) - 8
if n < 0 {
q.Disable()
_, err := io.Copy(w, r)
return err
}
if _, err := io.CopyN(w, r, n); err != nil {
return err
}
if header[1]&1 != 0 {
if login {
login = false
} else {
q.Finish(ctx, "sqlserver")
}
}
}
}