Skip to content
This repository has been archived by the owner on Aug 14, 2023. It is now read-only.

Commit

Permalink
为clearDomains启用trie
Browse files Browse the repository at this point in the history
  • Loading branch information
eaglexiang committed Mar 27, 2019
1 parent 6a54c4b commit 65a7752
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 37 deletions.
22 changes: 17 additions & 5 deletions src/core/core/controler.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
* @Github: https://github.com/eaglexiang
* @Date: 2018-12-27 08:37:36
* @LastEditors: EagleXiang
* @LastEditTime: 2019-03-25 23:08:02
* @LastEditTime: 2019-03-27 23:02:49
*/

package core
Expand Down Expand Up @@ -129,16 +129,28 @@ func readClearDomains() error {
// readWhitelist 读取强制代理的域名列表
func readProxylist() (err error) {
proxyDomainsPath := settings.Get("config-dir") + "/proxylists"
comm.ProxyDomains, err = readLinesFromDir(proxyDomainsPath, ".txt")
logger.Info(len(comm.ProxyDomains), " proxy-domains found")
proxyDomains, err := readLinesFromDir(proxyDomainsPath, ".txt")
if err != nil {
return err
}
for _, domain := range proxyDomains {
comm.ProxyDomains.ReverseGrow(domain)
}
logger.Info(comm.ProxyDomains.Count(), " proxy-domains imported")
return
}

// readDirectlist 读取强制直连的域名列表
func readDirectlist() (err error) {
directDomainsPath := settings.Get("config-dir") + "/directlists"
comm.DirectDomains, err = readLinesFromDir(directDomainsPath, ".txt")
logger.Info(len(comm.DirectDomains), " direct-domains found")
directDomains, err := readLinesFromDir(directDomainsPath, ".txt")
if err != nil {
return err
}
for _, domain := range directDomains {
comm.DirectDomains.ReverseGrow(domain)
}
logger.Info(comm.DirectDomains.Count(), " direct-domains imported")
return
}

Expand Down
28 changes: 9 additions & 19 deletions src/core/protocols/et/comm/comm.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,16 @@
* @Email: [email protected]
* @Github: https://github.com/eaglexiang
* @Date: 2019-03-24 22:35:45
* @LastEditTime: 2019-03-24 23:36:30
* @LastEditTime: 2019-03-27 22:48:21
*/
package comm

import (
"errors"
"strings"
"time"

"github.com/eaglexiang/go-trie"
)

// ET子协议的类型
Expand Down Expand Up @@ -73,10 +75,10 @@ var EtProxyStatusText map[int]string
var HostsCache = make(map[string]string)

// ProxyDomains 强制代理的域名列表
var ProxyDomains []string
var ProxyDomains trie.StringTrie

// DirectDomains 强制直连的域名列表
var DirectDomains []string
var DirectDomains trie.StringTrie

// Timeout 超时长度
var Timeout time.Duration
Expand Down Expand Up @@ -151,23 +153,11 @@ func FormatEtType(src int) string {

// TypeOfDomain 域名的类型(强制代理/强制直连/不确定)
func TypeOfDomain(domain string) (status int) {
if ProxyDomains == nil {
panic("proxy domains is nil")
}
if DirectDomains == nil {
panic("direct domains is nil")
}

for _, d := range ProxyDomains {
if strings.HasSuffix(domain, d) {
return ProxyDomain
}

if ProxyDomains.MatchSuffix(domain) {
return ProxyDomain
}
for _, d := range DirectDomains {
if strings.HasSuffix(domain, d) {
return DirectDomain
}
if DirectDomains.MatchSuffix(domain) {
return DirectDomain
}
return UncertainDomain
}
25 changes: 13 additions & 12 deletions src/core/protocols/et/core/ethandle.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
* @Email: [email protected]
* @Github: https://github.com/eaglexiang
* @Date: 2019-03-19 20:08:35
* @LastEditTime: 2019-03-19 20:08:35
* @LastEditTime: 2019-03-27 19:13:07
*/

package et
Expand All @@ -17,29 +17,30 @@ import (
"github.com/eaglexiang/eagle.tunnel.go/src/logger"
mycipher "github.com/eaglexiang/go-cipher"
mynet "github.com/eaglexiang/go-net"
mytunnel "github.com/eaglexiang/go-tunnel"
"github.com/eaglexiang/go-tunnel"
myuser "github.com/eaglexiang/go-user"
"go.uber.org/ratelimit"
)

// Handle 处理ET请求
func (et *ET) Handle(e *mynet.Arg) (err error) {
err = et.checkHeaderOfReq(string(e.Msg), e.Tunnel)
tunnel := e.Tunnel
err = et.checkHeaderOfReq(string(e.Msg), tunnel)
if err != nil {
return err
}
createCipher(e.Tunnel)
err = et.checkUserOfReq(e.Tunnel)
createCipher(tunnel)
err = et.checkUserOfReq(tunnel)
if err != nil {
return err
}
// 选择子协议handler
subReq, h, err := et.subShake(e.Tunnel)
subReq, h, err := et.subShake(tunnel)
if err != nil {
return err
}
// 进入子协议业务
err = h.Handle(subReq, e.Tunnel)
err = h.Handle(subReq, tunnel)
if err != nil {
return err
}
Expand All @@ -50,7 +51,7 @@ func (et *ET) Handle(e *mynet.Arg) (err error) {
return nil
}

func (et *ET) subShake(tunnel *mytunnel.Tunnel) (subReq string,
func (et *ET) subShake(tunnel *tunnel.Tunnel) (subReq string,
h comm.Handler, err error) {
subReq, err = tunnel.ReadLeftStr()
if err != nil {
Expand All @@ -63,7 +64,7 @@ func (et *ET) subShake(tunnel *mytunnel.Tunnel) (subReq string,
return subReq, h, err
}

func createCipher(tunnel *mytunnel.Tunnel) {
func createCipher(tunnel *tunnel.Tunnel) {
c := mycipher.DefaultCipher()
if c == nil {
panic("ET.Handle -> cipher is nil")
Expand All @@ -74,7 +75,7 @@ func createCipher(tunnel *mytunnel.Tunnel) {

func (et *ET) checkHeaderOfReq(
header string,
tunnel *mytunnel.Tunnel) error {
tunnel *tunnel.Tunnel) error {
headers := strings.Split(header, " ")
switch {
case len(headers) < 1:
Expand All @@ -89,7 +90,7 @@ func (et *ET) checkHeaderOfReq(
}
}

func (et *ET) checkUserOfReq(tunnel *mytunnel.Tunnel) (err error) {
func (et *ET) checkUserOfReq(tunnel *tunnel.Tunnel) (err error) {
if comm.ETArg.ValidUsers == nil {
// 未启用用户校验
return nil
Expand All @@ -105,7 +106,7 @@ func (et *ET) checkUserOfReq(tunnel *mytunnel.Tunnel) (err error) {
return err
}

func findReqUser(tunnel *mytunnel.Tunnel) (*myuser.ReqUser, error) {
func findReqUser(tunnel *tunnel.Tunnel) (*myuser.ReqUser, error) {
userStr, err := tunnel.ReadLeftStr()
if err != nil {
return nil, err
Expand Down
2 changes: 1 addition & 1 deletion src/whitelistdomains
Submodule whitelistdomains updated 1 files
+2,183 −9,564 proxylist.txt

0 comments on commit 65a7752

Please sign in to comment.