default.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package handler
  2. import (
  3. "ehang.io/nps/lib/enet"
  4. )
  5. var (
  6. _ Handler = (*HttpHandler)(nil)
  7. _ Handler = (*HttpsHandler)(nil)
  8. _ Handler = (*RdpHandler)(nil)
  9. _ Handler = (*RedisHandler)(nil)
  10. _ Handler = (*Socks5Handler)(nil)
  11. _ Handler = (*TransparentHandler)(nil)
  12. _ Handler = (*DefaultHandler)(nil)
  13. _ Handler = (*DnsHandler)(nil)
  14. _ Handler = (*P2PHandler)(nil)
  15. _ Handler = (*QUICHandler)(nil)
  16. _ Handler = (*DefaultHandler)(nil)
  17. _ Handler = (*Socks5UdpHandler)(nil)
  18. )
  19. type RuleRun interface {
  20. RunConn(enet.Conn) (bool, error)
  21. RunPacketConn(enet.PacketConn) (bool, error)
  22. }
  23. type DefaultHandler struct {
  24. ruleList []RuleRun
  25. }
  26. func NewBaseTcpHandler() *DefaultHandler {
  27. return &DefaultHandler{ruleList: make([]RuleRun, 0)}
  28. }
  29. func (b *DefaultHandler) GetName() string {
  30. return "default"
  31. }
  32. func (b *DefaultHandler) GetZhName() string {
  33. return "默认"
  34. }
  35. func (b *DefaultHandler) HandleConn(_ []byte, c enet.Conn) (bool, error) {
  36. return b.processConn(c)
  37. }
  38. func (b *DefaultHandler) AddRule(r RuleRun) {
  39. b.ruleList = append(b.ruleList, r)
  40. }
  41. func (b *DefaultHandler) HandlePacketConn(_ enet.PacketConn) (bool, error) {
  42. return false, nil
  43. }
  44. func (b *DefaultHandler) processConn(c enet.Conn) (bool, error) {
  45. for _, r := range b.ruleList {
  46. if ok, err := r.RunConn(c); err != nil || ok {
  47. return ok, err
  48. }
  49. }
  50. return false, nil
  51. }
  52. func (b *DefaultHandler) processPacketConn(pc enet.PacketConn) (bool, error) {
  53. for _, r := range b.ruleList {
  54. if ok, err := r.RunPacketConn(pc); err != nil || ok {
  55. return ok, err
  56. }
  57. }
  58. return false, nil
  59. }