Signed-off-by: arraykeys@gmail.com <arraykeys@gmail.com>

This commit is contained in:
arraykeys@gmail.com
2018-04-20 13:35:05 +08:00
parent c6f6266592
commit fbd8c67649
2 changed files with 2 additions and 103 deletions

View File

@ -4,13 +4,10 @@ import (
"crypto/sha1" "crypto/sha1"
"fmt" "fmt"
"log" "log"
"net"
"os" "os"
"snail007/proxy/services" "snail007/proxy/services"
"snail007/proxy/services/kcpcfg" "snail007/proxy/services/kcpcfg"
"strconv"
"strings" "strings"
"time"
kcp "github.com/xtaci/kcp-go" kcp "github.com/xtaci/kcp-go"
"golang.org/x/crypto/pbkdf2" "golang.org/x/crypto/pbkdf2"
@ -30,7 +27,7 @@ var (
//and so on. //and so on.
//if an error occured , errStr will be the error reason //if an error occured , errStr will be the error reason
//if start success, errStr is empty. //if start success, errStr is empty.
func Start(serviceID,serviceArgsStr string) (errStr string) { func Start(serviceID, serviceArgsStr string) (errStr string) {
//define args //define args
tcpArgs := services.TCPArgs{} tcpArgs := services.TCPArgs{}
httpArgs := services.HTTPArgs{} httpArgs := services.HTTPArgs{}
@ -344,7 +341,7 @@ func Start(serviceID,serviceArgsStr string) (errStr string) {
} }
_, err = services.Run(serviceID) _, err = services.Run(serviceID)
if err != nil { if err != nil {
return fmt.Sprintf("run service [%s:%s] fail, ERR:%s",serviceID, serviceName, err) return fmt.Sprintf("run service [%s:%s] fail, ERR:%s", serviceID, serviceName, err)
} }
return return
} }
@ -352,94 +349,3 @@ func Start(serviceID,serviceArgsStr string) (errStr string) {
func Stop(serviceID string) { func Stop(serviceID string) {
services.Stop(serviceID) services.Stop(serviceID)
} }
func IsRunning(serviceID string) bool {
srv := services.GetService(serviceID)
if srv == nil {
return false
}
typ := "tcp"
addr := ""
route := ""
switch srv.Name {
case "http":
addr = *srv.Args.(services.HTTPArgs).Local
case "socks":
addr = *srv.Args.(services.SocksArgs).Local
case "sps":
addr = *srv.Args.(services.SPSArgs).Local
case "tcp":
addr = *srv.Args.(services.TCPArgs).Local
case "bridge":
addr = *srv.Args.(services.MuxBridgeArgs).Local
case "tbridge":
addr = *srv.Args.(services.TunnelBridgeArgs).Local
case "server":
if len(*srv.Args.(services.MuxServerArgs).Route) > 0 {
route = (*srv.Args.(services.MuxServerArgs).Route)[0]
}
case "tserver":
if len(*srv.Args.(services.TunnelServerArgs).Route) > 0 {
route = (*srv.Args.(services.TunnelServerArgs).Route)[0]
}
case "client":
case "tclient":
case "udp":
typ = "udp"
}
if route != "" {
if strings.HasPrefix(route, "udp://") {
typ = "udp"
}
info := strings.TrimPrefix(route, "udp://")
info = strings.TrimPrefix(info, "tcp://")
_routeInfo := strings.Split(info, "@")
addr = _routeInfo[0]
}
a := strings.Split(addr, ",")
if len(a) > 0 {
return PortIsAlive(a[0], typ) == ""
}
return false
}
func PortIsAlive(address string, network ...string) string {
time.Sleep(time.Second)
n := "tcp"
if len(network) == 1 {
n = network[0]
}
if n == "tcp" {
conn, err := net.DialTimeout(n, address, time.Second)
if err != nil {
return fmt.Sprintf("connect %s is failed!,err:%v\n", address, err)
}
conn.Close()
} else {
ip, port, err := net.SplitHostPort(address)
if err != nil {
return err.Error()
}
portI, _ := strconv.Atoi(port)
dstAddr := &net.UDPAddr{IP: net.ParseIP(ip), Port: portI}
conn, err := net.DialUDP(n, &net.UDPAddr{IP: net.IPv4zero, Port: 0}, dstAddr)
if err != nil {
return err.Error()
}
conn.SetDeadline(time.Now().Add(time.Millisecond * 200))
_, err = conn.Write([]byte{0x00})
conn.SetDeadline(time.Now().Add(time.Millisecond * 200))
b := make([]byte, 1)
_, err = conn.Read(b)
if err != nil {
if strings.Contains(err.Error(), "refused") {
return err.Error()
}
} else {
conn.Close()
}
}
return ""
}

View File

@ -15,12 +15,5 @@ func Stop(serviceID *C.char) {
sdk.Stop(C.GoString(serviceID)) sdk.Stop(C.GoString(serviceID))
} }
//export IsRunning
func IsRunning(serviceID *C.char) C.int {
if sdk.IsRunning(C.GoString(serviceID)) {
return 1
}
return 0
}
func main() { func main() {
} }