diff options
| author | Felix Hanley <felix@userspace.com.au> | 2018-01-09 13:05:54 +0000 |
|---|---|---|
| committer | Felix Hanley <felix@userspace.com.au> | 2018-01-09 13:05:54 +0000 |
| commit | ff55e6b4b031a592e51c0c628cc0d0742c16922b (patch) | |
| tree | 3525f11139984741cc28b55ca2683e6c7eab24f9 | |
| parent | aa3ae997bbed64d6f06f549bfbf5d9ae4f5e84a3 (diff) | |
| download | dhtsearch-ff55e6b4b031a592e51c0c628cc0d0742c16922b.tar.gz dhtsearch-ff55e6b4b031a592e51c0c628cc0d0742c16922b.tar.bz2 | |
Begin splitting up libraries
| -rw-r--r-- | bencode/bencode.go (renamed from bencode.go) | 2 | ||||
| -rw-r--r-- | bittorrent/client.go (renamed from btclient.go) | 16 | ||||
| -rw-r--r-- | config.go | 35 | ||||
| -rw-r--r-- | crawler/crawler.go (renamed from server.go) | 29 | ||||
| -rw-r--r-- | crawler/dht.go (renamed from dht.go) | 2 | ||||
| -rw-r--r-- | crawler/dht_worker.go (renamed from dht_worker.go) | 2 | ||||
| -rw-r--r-- | crawler/krpc.go | 37 | ||||
| -rw-r--r-- | crawler/packet.go (renamed from packet.go) | 2 | ||||
| -rw-r--r-- | crawler/peer.go | 9 | ||||
| -rw-r--r-- | crawler/remote_node.go (renamed from remote_node.go) | 2 | ||||
| -rw-r--r-- | crawler/routing_table.go (renamed from routing_table.go) | 2 | ||||
| -rw-r--r-- | example-config.toml | 16 | ||||
| -rw-r--r-- | peer.go | 9 | ||||
| -rw-r--r-- | util.go (renamed from krpc.go) | 0 |
14 files changed, 78 insertions, 85 deletions
diff --git a/bencode.go b/bencode/bencode.go index 16ec993..6b2373a 100644 --- a/bencode.go +++ b/bencode/bencode.go @@ -1,4 +1,4 @@ -package dhtsearch +package bencode // Lifted from github.com/shiyanhui/dht diff --git a/btclient.go b/bittorrent/client.go index 957dc89..f4ac28e 100644 --- a/btclient.go +++ b/bittorrent/client.go @@ -14,10 +14,16 @@ import ( "strings" "time" + "github.com/felix/dhtsearch/bencode" "github.com/felix/logger" ) const ( + TCPTimeout = 5 + UDPTimeout = 5 +) + +const ( // MsgRequest represents request message type MsgRequest = iota // MsgData represents data message type @@ -175,7 +181,7 @@ func (bt *btClient) fetchMetadata(p peer) (out []byte, err error) { return out, errors.New("no pieces found") } - d, index, err := DecodeDict(payload, 0) + d, index, err := bencode.DecodeDict(payload, 0) if err != nil { return out, err } @@ -217,7 +223,7 @@ func (bt *btClient) fetchMetadata(p peer) (out []byte, err error) { } func decodeMetadata(p peer, md []byte) (*Torrent, error) { - metadata, err := Decode(md) + metadata, err := bencode.Decode(md) if err != nil { return nil, err } @@ -334,7 +340,7 @@ func onHandshake(data []byte) (err error) { func sendExtHandshake(conn *net.TCPConn) error { data := append( []byte{MsgExtended, HandshakeBit}, - Encode(map[string]interface{}{ + bencode.Encode(map[string]interface{}{ "m": map[string]interface{}{"ut_metadata": 1}, })..., ) @@ -344,7 +350,7 @@ func sendExtHandshake(conn *net.TCPConn) error { // getUTMetaSize returns the ut_metadata and metadata_size. func getUTMetaSize(data []byte) (utMetadata int, metadataSize int, err error) { - v, err := Decode(data) + v, err := bencode.Decode(data) if err != nil { return utMetadata, metadataSize, err } @@ -381,7 +387,7 @@ func (bt *btClient) requestPieces(conn *net.TCPConn, utMetadata int, metadataSiz buffer[0] = MsgExtended buffer[1] = byte(utMetadata) - msg := Encode(map[string]interface{}{ + msg := bencode.Encode(map[string]interface{}{ "msg_type": MsgRequest, "piece": i, }) diff --git a/config.go b/config.go deleted file mode 100644 index b08557d..0000000 --- a/config.go +++ /dev/null @@ -1,35 +0,0 @@ -package dhtsearch - -// Config - -type Config struct { - BasePort int `toml:"base_port"` - Debug bool `toml:"debug"` - NoHTTP bool `toml:"no_http"` - HTTPAddress string `toml:"http_address"` - DSN string `toml:"dsn"` - NumNodes int `toml:"num_nodes"` - Tags map[string]string `toml:"tags"` - SkipTags []string `toml:"skip_tags"` - - // Advanced - MaxBTWorkers int `toml:"max_bt_workers"` - MaxDHTWorkers int `toml:"max_dht_workers"` - PeerCacheSize int `toml:"peer_cache_size"` - ResultsPageSize int `toml:"results_page_size"` -} - -// DefaultConfig sets the defaults -func DefaultConfig() Config { - return Config{ - BasePort: 6881, - NumNodes: 1, - Debug: false, - DSN: "postgres://dht:dht@localhost/dht?sslmode=disable", - NoHTTP: false, - HTTPAddress: "localhost:6880", - MaxBTWorkers: 10, - MaxDHTWorkers: 256, - PeerCacheSize: 200, - ResultsPageSize: 50, - } -} diff --git a/server.go b/crawler/crawler.go index 5a7da30..bfd9785 100644 --- a/server.go +++ b/crawler/crawler.go @@ -1,4 +1,4 @@ -package dhtsearch +package crawler import ( "regexp" @@ -7,11 +7,11 @@ import ( ) const ( - TCPTimeout = 10 - UDPTimeout = 10 + TCPTimeout = 5 + UDPTimeout = 5 ) -type Server struct { +type Crawler struct { port int nodes int httpAddress string @@ -20,10 +20,11 @@ type Server struct { } // Option are options for the server -type Option func(*Server) error +type Option func(*Crawler) error -func NewServer(dsn string, opts ...Option) (*Server, error) { - s := &Server{ +// NewCrawler creates a set of DHT nodes to crawl the network +func NewCrawer(opts ...Option) (*Crawler, error) { + s := &Crawler{ port: 6881, nodes: 1, httpAddress: "localhost:6880", @@ -32,7 +33,7 @@ func NewServer(dsn string, opts ...Option) (*Server, error) { // Default logger logOpts := &logger.Options{ - Name: "dhtsearch", + Name: "crawler", Level: logger.Info, } s.log = logger.New(logOpts) @@ -79,7 +80,7 @@ func NewServer(dsn string, opts ...Option) (*Server, error) { // SetLogger sets the server func SetLogger(l logger.Logger) Option { - return func(s *Server) error { + return func(s *Crawler) error { s.log = l return nil } @@ -87,7 +88,7 @@ func SetLogger(l logger.Logger) Option { // SetPort sets the base port func SetPort(p int) Option { - return func(s *Server) error { + return func(s *Crawler) error { s.port = p return nil } @@ -95,7 +96,7 @@ func SetPort(p int) Option { // SetNodes determines the number of nodes to start func SetNodes(n int) Option { - return func(s *Server) error { + return func(s *Crawler) error { s.nodes = n return nil } @@ -103,7 +104,7 @@ func SetNodes(n int) Option { // SetHTTPAddress determines the listening address for HTTP func SetHTTPAddress(a string) Option { - return func(s *Server) error { + return func(s *Crawler) error { s.httpAddress = a return nil } @@ -111,7 +112,7 @@ func SetHTTPAddress(a string) Option { // SetTags determines the listening address for HTTP func SetTags(tags map[string]string) Option { - return func(s *Server) error { + return func(s *Crawler) error { // Merge user tags err := mergeTagRegexps(s.tagREs, tags) if err != nil { @@ -121,7 +122,7 @@ func SetTags(tags map[string]string) Option { } } -func (s *Server) Stats() Stats { +func (s *Crawler) Stats() Stats { s.statlock.RLock() defer s.statlock.RUnlock() return s.stats @@ -1,4 +1,4 @@ -package dhtsearch +package crawler import ( "math" diff --git a/dht_worker.go b/crawler/dht_worker.go index ef86dc1..29f3bc5 100644 --- a/dht_worker.go +++ b/crawler/dht_worker.go @@ -1,4 +1,4 @@ -package dhtsearch +package crawler import ( "net" diff --git a/crawler/krpc.go b/crawler/krpc.go new file mode 100644 index 0000000..67150c0 --- /dev/null +++ b/crawler/krpc.go @@ -0,0 +1,37 @@ +package crawler + +import ( + "errors" + "fmt" + "net" +) + +// makeQuery returns a query-formed data. +func makeQuery(t, q string, a map[string]interface{}) map[string]interface{} { + return map[string]interface{}{ + "t": t, + "y": "q", + "q": q, + "a": a, + } +} + +// makeResponse returns a response-formed data. +func makeResponse(t string, r map[string]interface{}) map[string]interface{} { + return map[string]interface{}{ + "t": t, + "y": "r", + "r": r, + } +} + +// parseKeys parses keys. It just wraps parseKey. +func parseKeys(data map[string]interface{}, pairs [][]string) error { + for _, args := range pairs { + key, t := args[0], args[1] + if err := parseKey(data, key, t); err != nil { + return err + } + } + return nil +} diff --git a/packet.go b/crawler/packet.go index 7c5368b..1fa3318 100644 --- a/packet.go +++ b/crawler/packet.go @@ -1,4 +1,4 @@ -package dhtsearch +package crawler import "net" diff --git a/crawler/peer.go b/crawler/peer.go new file mode 100644 index 0000000..06be506 --- /dev/null +++ b/crawler/peer.go @@ -0,0 +1,9 @@ +package crawler + +import "net" + +// Peer on DHT network +type Peer struct { + Address net.UDPAddr + ID string +} diff --git a/remote_node.go b/crawler/remote_node.go index 0a1083d..bfbc5ac 100644 --- a/remote_node.go +++ b/crawler/remote_node.go @@ -1,4 +1,4 @@ -package dhtsearch +package crawler import ( "fmt" diff --git a/routing_table.go b/crawler/routing_table.go index 5f5ed04..8bb0d3c 100644 --- a/routing_table.go +++ b/crawler/routing_table.go @@ -1,4 +1,4 @@ -package dhtsearch +package crawler import ( "net" diff --git a/example-config.toml b/example-config.toml deleted file mode 100644 index 47e0986..0000000 --- a/example-config.toml +++ /dev/null @@ -1,16 +0,0 @@ -# Move to config.toml in the same directory as the binary. -# All command line arguments are accepted plus some more. - -# The following are the defaults: - -base-port = 6881 -num-nodes = 1 -debug = false -quiet = false -dsn = "postgres://dht:dht@localhost/dht?sslmode=disable" -no-http = false -http-address = "localhost:6880" -skip-tags = ["adult"] - -[tags] -test = "\\.asdfasdfsdfsfdsfs" diff --git a/peer.go b/peer.go deleted file mode 100644 index 4fc2b95..0000000 --- a/peer.go +++ /dev/null @@ -1,9 +0,0 @@ -package dhtsearch - -import "net" - -// Annouced peer -type peer struct { - address net.UDPAddr - id string -} |
