vmess.go 798 B

12345678910111213141516171819202122232425262728293031323334353637
  1. // Package vmess contains protocol definition, io lib for VMess.
  2. package vmess
  3. import (
  4. "fmt"
  5. "io"
  6. )
  7. // VMessInput implements the input message of VMess protocol. It only contains
  8. // the header of a input message. The data part will be handled by conection
  9. // handler directly, in favor of data streaming.
  10. type VMessInput struct {
  11. version byte
  12. userHash [16]byte
  13. respKey [16]byte
  14. iv [16]byte
  15. respHead [4]byte
  16. command byte
  17. port uint16
  18. target [256]byte
  19. }
  20. func Read(reader io.Reader) (input *VMessInput, err error) {
  21. buffer := make([]byte, 17 /* version + user hash */)
  22. nBytes, err := reader.Read(buffer)
  23. if err != nil {
  24. return
  25. }
  26. if nBytes != len(buffer) {
  27. err = fmt.Errorf("Unexpected length of header %d", nBytes)
  28. return
  29. }
  30. return
  31. }
  32. type VMessOutput [4]byte