header.go 660 B

1234567891011121314151617181920212223242526272829303132
  1. package internet
  2. import "v2ray.com/core/common"
  3. type PacketHeader interface {
  4. Size() int
  5. Write([]byte) int
  6. }
  7. type PacketHeaderFactory interface {
  8. Create(interface{}) PacketHeader
  9. }
  10. var (
  11. headerCache = make(map[string]PacketHeaderFactory)
  12. )
  13. func RegisterPacketHeader(name string, factory PacketHeaderFactory) error {
  14. if _, found := headerCache[name]; found {
  15. return common.ErrDuplicatedName
  16. }
  17. headerCache[name] = factory
  18. return nil
  19. }
  20. func CreatePacketHeader(name string, config interface{}) (PacketHeader, error) {
  21. factory, found := headerCache[name]
  22. if !found {
  23. return nil, common.ErrObjectNotFound
  24. }
  25. return factory.Create(config), nil
  26. }