header.go 843 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. package internet
  2. import (
  3. "context"
  4. "net"
  5. "v2ray.com/core/common"
  6. )
  7. type PacketHeader interface {
  8. Size() int
  9. Write([]byte) (int, error)
  10. }
  11. func CreatePacketHeader(config interface{}) (PacketHeader, error) {
  12. header, err := common.CreateObject(context.Background(), config)
  13. if err != nil {
  14. return nil, err
  15. }
  16. if h, ok := header.(PacketHeader); ok {
  17. return h, nil
  18. }
  19. return nil, newError("not a packet header")
  20. }
  21. type ConnectionAuthenticator interface {
  22. Client(net.Conn) net.Conn
  23. Server(net.Conn) net.Conn
  24. }
  25. func CreateConnectionAuthenticator(config interface{}) (ConnectionAuthenticator, error) {
  26. auth, err := common.CreateObject(context.Background(), config)
  27. if err != nil {
  28. return nil, err
  29. }
  30. if a, ok := auth.(ConnectionAuthenticator); ok {
  31. return a, nil
  32. }
  33. return nil, newError("not a ConnectionAuthenticator")
  34. }