internal/protocol/sniffer.go
func (s *Sniffer) Go() {
	defer s.dbConn.Close()
	defer s.conn.Close()

	req := newInitRequest()
	if err := s.streamFragment(dir(true), s.clRd, s.dbWr, req); err != nil {
		return
	}

	rep := newInitReply()
	if err := s.streamFragment(dir(false), s.dbRd, s.clWr, rep); err != nil {
		return
	}

	for {
		//up stream
		if err := s.stream(dir(true), s.clRd, s.dbWr); err != nil {
			return
		}
		//down stream
		if err := s.stream(dir(false), s.dbRd, s.clWr); err != nil {
			return
		}
	}
}
func (s *Sniffer) Go() {
	defer s.dbConn.Close()
	defer s.conn.Close()

	req := newInitRequest()
	if err := s.streamFragment(dir(true), s.clRd, s.dbWr, req); err != nil {
		return
	}

	rep := newInitReply()
	if err := s.streamFragment(dir(false), s.dbRd, s.clWr, rep); err != nil {
		return
	}

	for {
		//up stream
		if err := s.stream(dir(true), s.clRd, s.dbWr); err != nil {
			return
		}
		//down stream
		if err := s.stream(dir(false), s.dbRd, s.clWr); err != nil {
			return
		}
	}
}
// Go starts the protocol request and response logging.