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

Commit

Permalink
部分启用logger
Browse files Browse the repository at this point in the history
  • Loading branch information
eaglexiang committed Mar 17, 2019
1 parent 4736c4b commit 568d37b
Show file tree
Hide file tree
Showing 15 changed files with 411 additions and 361 deletions.
52 changes: 27 additions & 25 deletions src/core/core/controler.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,13 @@
* @Github: https://github.com/eaglexiang
* @Date: 2018-12-27 08:37:36
* @LastEditors: EagleXiang
* @LastEditTime: 2019-03-16 16:51:50
* @LastEditTime: 2019-03-17 16:39:08
*/

package core

import (
"bufio"
"errors"
"fmt"
"io/ioutil"
"net"
"os"
Expand All @@ -21,6 +19,8 @@ import (
"strings"
"time"

"github.com/eaglexiang/eagle.tunnel.go/src/logger"

myet "github.com/eaglexiang/eagle.tunnel.go/src/core/protocols/et"
"github.com/eaglexiang/go-settings"
myuser "github.com/eaglexiang/go-user"
Expand Down Expand Up @@ -51,7 +51,7 @@ func init() {
settings.SetDefault("http", "off")
settings.SetDefault("socks", "off")
settings.SetDefault("et", "off")
settings.SetDefault("debug", "off")
settings.SetDefault("debug", "warning")
settings.SetDefault("cipher", "simple")
settings.SetDefault("maxclients", "0")
}
Expand Down Expand Up @@ -129,12 +129,14 @@ func execUserSystem() error {
}

func execTimeout() error {
_timeout := settings.Get("timeout")
timeout, err := strconv.ParseInt(
settings.Get("timeout"),
_timeout,
10,
32)
if err != nil {
return errors.New("ExecConfig -> " + err.Error())
logger.Error("invalid timeout", _timeout)
return err
}
Timeout = time.Second * time.Duration(timeout)
return nil
Expand All @@ -144,17 +146,16 @@ func execHosts() (err error) {
hostsDir := settings.Get("config-dir") + "/hosts"
err = readHosts(hostsDir)
if err != nil {
return errors.New("ExecConfig -> " + err.Error())
return err
}
return nil
}

func execMods() (err error) {
if settings.Exsit("mod-dir") {
modsDir := settings.Get("mod-dir")
if modsDir := settings.Get("mod-dir"); modsDir != "" {
err = ImportMods(modsDir)
if err != nil {
return errors.New("ExecConfig -> " + err.Error())
return err
}
}
return nil
Expand All @@ -171,11 +172,11 @@ func SetUser(user string) error {
}

//SetProxyStatus 设置Proxy-Status,enable/smart
func SetProxyStatus(status string) error {
ProxyStatus = myet.ParseProxyStatus(status)
if ProxyStatus == myet.ErrorProxyStatus {
return errors.New("SetProxyStatus -> invalid proxy-status: " +
settings.Get("proxy-status"))
func SetProxyStatus(status string) (err error) {
ProxyStatus, err = myet.ParseProxyStatus(status)
if err != nil {
logger.Error(err)
return
}
settings.Set("proxy-status", status)
return nil
Expand All @@ -184,6 +185,7 @@ func SetProxyStatus(status string) error {
func readLines(filePath string) ([]string, error) {
file, err := os.Open(filePath)
if err != nil {
logger.Error(err)
return nil, err
}
defer file.Close()
Expand Down Expand Up @@ -258,8 +260,7 @@ func SetListen(localIpe string) {
func readHosts(hostsDir string) error {
hostsFiles, err := getHostsList(hostsDir)
if err != nil {
return errors.New("readHosts -> " +
err.Error())
return err
}

var hosts []string
Expand All @@ -274,7 +275,7 @@ func readHosts(hostsDir string) error {
for index, host := range hosts {
err = handleSingleHost(host)
if err != nil {
return errors.New("readHosts -> " + err.Error())
return err
}
hosts[index] = host
}
Expand All @@ -293,23 +294,23 @@ func handleSingleHost(host string) (err error) {

items := strings.Split(host, " ")
if len(items) < 2 {
return errors.New("invalid hosts line: " + host)
panic("invalid hosts line: " + host)
}
ip := strings.TrimSpace(items[0])
domain := strings.TrimSpace(items[1])
if domain != "" && ip != "" {
myet.HostsCache[domain] = ip
} else {
return errors.New("invalid hosts line: " + host)
panic("invalid hosts line: " + host)
}
return nil
}

func getHostsList(hostsDir string) ([]string, error) {
files, err := ioutil.ReadDir(hostsDir)
if err != nil {
return nil, errors.New("getHostsList -> " +
err.Error())
logger.Error(err)
return nil, err
}
var hosts []string
for _, file := range files {
Expand All @@ -328,8 +329,8 @@ func getHostsList(hostsDir string) ([]string, error) {
func ImportMods(modsDir string) error {
files, err := ioutil.ReadDir(modsDir)
if err != nil {
return errors.New("ImportMods -> " +
err.Error())
logger.Error(err)
return err
}
for _, file := range files {
if file.IsDir() {
Expand All @@ -340,7 +341,8 @@ func ImportMods(modsDir string) error {
if strings.HasSuffix(filename, ".so") {
_, err := plugin.Open(filename)
if err != nil {
fmt.Println(err)
logger.Error(err)
return err
}
}
}
Expand Down
87 changes: 43 additions & 44 deletions src/core/core/relay.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
* @Github: https://github.com/eaglexiang
* @Date: 2019-01-03 15:27:00
* @LastEditors: EagleXiang
* @LastEditTime: 2019-03-16 15:25:12
* @LastEditTime: 2019-03-17 16:31:56
*/

package core
Expand All @@ -13,6 +13,7 @@ import (
"net"
"reflect"

logger "github.com/eaglexiang/eagle.tunnel.go/src/logger"
"github.com/eaglexiang/go-bytebuffer"
mynet "github.com/eaglexiang/go-net"
mytunnel "github.com/eaglexiang/go-tunnel"
Expand All @@ -36,108 +37,106 @@ func (relay *Relay) SetSender(sender Sender) {
}

// Handle 处理请求连接
func (relay *Relay) Handle(conn net.Conn) (err error) {
func (relay *Relay) Handle(conn net.Conn) {
tunnel := mytunnel.GetTunnel()
defer mytunnel.PutTunnel(tunnel)
tunnel.Left = conn
tunnel.Timeout = Timeout
// 获取握手消息和对应handler
firstMsg, handler, err := relay.shake(tunnel)
if err != nil {
return errors.New("Relay.Handle -> " +
err.Error())
return
}
defer bytebuffer.PutKBBuffer(firstMsg)
e := &mynet.Arg{
Msg: firstMsg.Data(),
Tunnel: tunnel,
}
return relay.handleReqs(handler, tunnel, e)
relay.handleReqs(handler, tunnel, e)
}

func (relay *Relay) handleReqs(handler Handler,
tunnel *mytunnel.Tunnel,
e *mynet.Arg) error {
e *mynet.Arg) {
// 判断是否是sender业务
var need2Continue bool
if reflect.TypeOf(relay.sender) == reflect.TypeOf(handler) {
return relay.handleSenderReqs(handler, tunnel, e)
need2Continue = relay.handleSenderReqs(handler, e)
} else {
need2Continue = relay.handleOtherReqs(handler, tunnel, e)
}
if need2Continue {
tunnel.Flow()
}
return relay.handleOtherReqs(handler, tunnel, e)
}

// 使用sender业务向远端发起请求
func (relay *Relay) handleSenderReqs(handler Handler,
tunnel *mytunnel.Tunnel,
e *mynet.Arg) (err error) {
// 直接处理
err = handler.Handle(e)
if err != nil {
if err.Error() == "no need to continue" {
return nil
}
return errors.New("Relay.Handle -> " +
err.Error())
e *mynet.Arg) bool {
err := handler.Handle(e)
if err == nil {
return true
}
// 开始流动
tunnel.Flow()
return nil
if err.Error() != "no need to continue" {
logger.Warning("Relay.Handle -> ", err)
}
return false
}

// 从非sender业务获取目的Host
// 然后根据目的Host建立连接
func (relay *Relay) handleOtherReqs(
handler Handler,
tunnel *mytunnel.Tunnel,
e *mynet.Arg) (err error) {
e *mynet.Arg) bool {
// 获取Host
err = handler.Handle(e)
err := handler.Handle(e)
if err != nil {
if err.Error() == "no need to continue" {
return nil
return true
}
return errors.New("Relay.Handle -> " +
err.Error())
logger.Warning("fail to get host")
return false
}
// 发起连接
err = relay.sender.Send(e)
if err != nil {
return errors.New("Relay.Handle -> " +
err.Error())
logger.Warning("fail to connect")
return false
}
// 完成委托行为
for _, f := range e.Delegates {
f()
if !f() {
return false
}
}
tunnel.Flow()
return nil
return true
}

func getHandler(firstMsg *bytebuffer.ByteBuffer, handlers []Handler) Handler {
var handler Handler
func getHandler(firstMsg *bytebuffer.ByteBuffer, handlers []Handler) (Handler, error) {
for _, h := range handlers {
if h.Match(firstMsg.Data()) {
handler = h
break
return h, nil
}
}
return handler
return nil, errors.New("no matched handler")
}

// shake 握手
// 获取握手消息和对应handler
func (relay *Relay) shake(tunnel *mytunnel.Tunnel) (
msg *bytebuffer.ByteBuffer,
handler Handler, err error) {
buffer := bytebuffer.GetKBBuffer()
buffer.Length, err = tunnel.ReadLeft(buffer.Buf())
if err != nil {
bytebuffer.PutKBBuffer(buffer)
return nil, nil, errors.New("getFirstMsg -> " +
err.Error())
logger.Warning("fail to get first msg")
return nil, nil, err
}
handler = getHandler(buffer, relay.handlers)
if handler == nil {
bytebuffer.PutKBBuffer(buffer)
return nil, nil, errors.New("Relay.Handle -> no matched handler from " +
tunnel.Left.RemoteAddr().String() + ": ")
handler, err = getHandler(buffer, relay.handlers)
if err != nil {
logger.Warning(err)
return nil, nil, err
}
return buffer, handler, nil
}
Loading

0 comments on commit 568d37b

Please sign in to comment.