OSDN Git Service

Add p2p security module (#143)
[bytom/vapor.git] / p2p / security / filter.go
1 package security
2
3 import "sync"
4
5 type Filter interface {
6         DoFilter(string, string) error
7 }
8
9 type PeerFilter struct {
10         filterChain []Filter
11         mtx         sync.RWMutex
12 }
13
14 func NewPeerFilter() *PeerFilter {
15         return &PeerFilter{
16                 filterChain: make([]Filter, 0),
17         }
18 }
19
20 func (pf *PeerFilter) register(filter Filter) {
21         pf.mtx.Lock()
22         defer pf.mtx.Unlock()
23
24         pf.filterChain = append(pf.filterChain, filter)
25 }
26
27 func (pf *PeerFilter) doFilter(ip string, pubKey string) error {
28         pf.mtx.RLock()
29         defer pf.mtx.RUnlock()
30
31         for _, filter := range pf.filterChain {
32                 if err := filter.DoFilter(ip, pubKey); err != nil {
33                         return err
34                 }
35         }
36
37         return nil
38 }