@@ -110,7 +110,7 @@ func snifer(ctx context.Context, sniferList []proxyman.KnownProtocols, outbound
if mb.IsEmpty() {
continue
}
- nBytes, _ := mb.Read(payload)
+ nBytes := mb.Copy(payload)
for _, protocol := range sniferList {
var f func([]byte) (string, error)
switch protocol {
@@ -31,6 +31,18 @@ func (mb *MultiBuffer) AppendMulti(buf MultiBuffer) {
*mb = append(*mb, buf...)
+func (mb MultiBuffer) Copy(b []byte) int {
+ total := 0
+ for _, bb := range mb {
+ nBytes := copy(b[total:], bb.Bytes())
+ total += nBytes
+ if nBytes < bb.Len() {
+ break
+ }
+ return total
+}
+
func (mb *MultiBuffer) Read(b []byte) (int, error) {
endIndex := len(*mb)
totalBytes := 0