未验证 提交 1325c59a 编写于 作者: F fatedier 提交者: GitHub

Merge pull request #672 from fatedier/dev

bump version to v0.16.1
...@@ -2,8 +2,7 @@ sudo: false ...@@ -2,8 +2,7 @@ sudo: false
language: go language: go
go: go:
- 1.8.x - 1.10.x
- 1.9.x
install: install:
- make - make
......
...@@ -15,12 +15,7 @@ file: ...@@ -15,12 +15,7 @@ file:
go generate ./assets/... go generate ./assets/...
fmt: fmt:
go fmt ./assets/... go fmt ./...
go fmt ./client/...
go fmt ./cmd/...
go fmt ./models/...
go fmt ./server/...
go fmt ./utils/...
frps: frps:
go build -o bin/frps ./cmd/frps go build -o bin/frps ./cmd/frps
......
...@@ -9,6 +9,10 @@ build: app ...@@ -9,6 +9,10 @@ build: app
app: app:
env CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o ./frpc_darwin_amd64 ./cmd/frpc env CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o ./frpc_darwin_amd64 ./cmd/frpc
env CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o ./frps_darwin_amd64 ./cmd/frps env CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o ./frps_darwin_amd64 ./cmd/frps
env CGO_ENABLED=0 GOOS=freebsd GOARCH=386 go build -ldflags "$(LDFLAGS)" -o ./frpc_freebsd_386 ./cmd/frpc
env CGO_ENABLED=0 GOOS=freebsd GOARCH=386 go build -ldflags "$(LDFLAGS)" -o ./frps_freebsd_386 ./cmd/frps
env CGO_ENABLED=0 GOOS=freebsd GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o ./frpc_freebsd_amd64 ./cmd/frpc
env CGO_ENABLED=0 GOOS=freebsd GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o ./frps_freebsd_amd64 ./cmd/frps
env CGO_ENABLED=0 GOOS=linux GOARCH=386 go build -ldflags "$(LDFLAGS)" -o ./frpc_linux_386 ./cmd/frpc env CGO_ENABLED=0 GOOS=linux GOARCH=386 go build -ldflags "$(LDFLAGS)" -o ./frpc_linux_386 ./cmd/frpc
env CGO_ENABLED=0 GOOS=linux GOARCH=386 go build -ldflags "$(LDFLAGS)" -o ./frps_linux_386 ./cmd/frps env CGO_ENABLED=0 GOOS=linux GOARCH=386 go build -ldflags "$(LDFLAGS)" -o ./frps_linux_386 ./cmd/frps
env CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o ./frpc_linux_amd64 ./cmd/frpc env CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o ./frpc_linux_amd64 ./cmd/frpc
...@@ -23,10 +27,10 @@ app: ...@@ -23,10 +27,10 @@ app:
env CGO_ENABLED=0 GOOS=linux GOARCH=mips64 go build -ldflags "$(LDFLAGS)" -o ./frps_linux_mips64 ./cmd/frps env CGO_ENABLED=0 GOOS=linux GOARCH=mips64 go build -ldflags "$(LDFLAGS)" -o ./frps_linux_mips64 ./cmd/frps
env CGO_ENABLED=0 GOOS=linux GOARCH=mips64le go build -ldflags "$(LDFLAGS)" -o ./frpc_linux_mips64le ./cmd/frpc env CGO_ENABLED=0 GOOS=linux GOARCH=mips64le go build -ldflags "$(LDFLAGS)" -o ./frpc_linux_mips64le ./cmd/frpc
env CGO_ENABLED=0 GOOS=linux GOARCH=mips64le go build -ldflags "$(LDFLAGS)" -o ./frps_linux_mips64le ./cmd/frps env CGO_ENABLED=0 GOOS=linux GOARCH=mips64le go build -ldflags "$(LDFLAGS)" -o ./frps_linux_mips64le ./cmd/frps
env CGO_ENABLED=0 GOOS=linux GOARCH=mips go build -ldflags "$(LDFLAGS)" -o ./frpc_linux_mips ./cmd/frpc env CGO_ENABLED=0 GOOS=linux GOARCH=mips GOMIPS=softfloat go build -ldflags "$(LDFLAGS)" -o ./frpc_linux_mips ./cmd/frpc
env CGO_ENABLED=0 GOOS=linux GOARCH=mips go build -ldflags "$(LDFLAGS)" -o ./frps_linux_mips ./cmd/frps env CGO_ENABLED=0 GOOS=linux GOARCH=mips GOMIPS=softfloat go build -ldflags "$(LDFLAGS)" -o ./frps_linux_mips ./cmd/frps
env CGO_ENABLED=0 GOOS=linux GOARCH=mipsle go build -ldflags "$(LDFLAGS)" -o ./frpc_linux_mipsle ./cmd/frpc env CGO_ENABLED=0 GOOS=linux GOARCH=mipsle GOMIPS=softfloat go build -ldflags "$(LDFLAGS)" -o ./frpc_linux_mipsle ./cmd/frpc
env CGO_ENABLED=0 GOOS=linux GOARCH=mipsle go build -ldflags "$(LDFLAGS)" -o ./frps_linux_mipsle ./cmd/frps env CGO_ENABLED=0 GOOS=linux GOARCH=mipsle GOMIPS=softfloat go build -ldflags "$(LDFLAGS)" -o ./frps_linux_mipsle ./cmd/frps
temp: temp:
env CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o ./frps_linux_amd64 ./cmd/frps env CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o ./frps_linux_amd64 ./cmd/frps
...@@ -86,7 +86,7 @@ func main() { ...@@ -86,7 +86,7 @@ func main() {
if args["reload"] != nil { if args["reload"] != nil {
if args["reload"].(bool) { if args["reload"].(bool) {
if err = CmdReload(); err != nil { if err = CmdReload(); err != nil {
fmt.Printf("frps reload error: %v\n", err) fmt.Printf("frpc reload error: %v\n", err)
os.Exit(1) os.Exit(1)
} else { } else {
fmt.Printf("reload success\n") fmt.Printf("reload success\n")
......
...@@ -73,7 +73,7 @@ local_port = 22 ...@@ -73,7 +73,7 @@ local_port = 22
# if remote_port is 0, frps will assgin a random port for you # if remote_port is 0, frps will assgin a random port for you
remote_port = 0 remote_port = 0
# if you want tp expose multiple ports, add 'range:' prefix to the section name # if you want to expose multiple ports, add 'range:' prefix to the section name
# frpc will generate multiple proxies such as 'tcp_port_6010', 'tcp_port_6011' and so on. # frpc will generate multiple proxies such as 'tcp_port_6010', 'tcp_port_6011' and so on.
[range:tcp_port] [range:tcp_port]
type = tcp type = tcp
......
...@@ -788,7 +788,7 @@ func ParseRangeSection(name string, section ini.Section) (sections map[string]in ...@@ -788,7 +788,7 @@ func ParseRangeSection(name string, section ini.Section) (sections map[string]in
return return
} }
if len(localPorts) == 0 { if len(localPorts) == 0 {
err = fmt.Errorf("Parse conf error: range section [%s] local_port and remote_port is necessary") err = fmt.Errorf("Parse conf error: range section [%s] local_port and remote_port is necessary", name)
return return
} }
......
...@@ -82,6 +82,7 @@ func Forwarder(dstAddr *net.UDPAddr, readCh <-chan *msg.UdpPacket, sendCh chan<- ...@@ -82,6 +82,7 @@ func Forwarder(dstAddr *net.UDPAddr, readCh <-chan *msg.UdpPacket, sendCh chan<-
mu.Lock() mu.Lock()
delete(udpConnMap, addr) delete(udpConnMap, addr)
mu.Unlock() mu.Unlock()
udpConn.Close()
}() }()
buf := pool.GetBuf(1500) buf := pool.GetBuf(1500)
......
...@@ -14,7 +14,7 @@ make -f ./Makefile.cross-compiles ...@@ -14,7 +14,7 @@ make -f ./Makefile.cross-compiles
rm -rf ./packages rm -rf ./packages
mkdir ./packages mkdir ./packages
os_all='linux windows darwin' os_all='linux windows darwin freebsd'
arch_all='386 amd64 arm mips64 mips64le mips mipsle' arch_all='386 amd64 arm mips64 mips64le mips mipsle'
for os in $os_all; do for os in $os_all; do
......
...@@ -265,13 +265,14 @@ func (ctl *Control) stoper() { ...@@ -265,13 +265,14 @@ func (ctl *Control) stoper() {
ctl.conn.Close() ctl.conn.Close()
ctl.readerShutdown.WaitDone() ctl.readerShutdown.WaitDone()
ctl.mu.Lock()
defer ctl.mu.Unlock()
close(ctl.workConnCh) close(ctl.workConnCh)
for workConn := range ctl.workConnCh { for workConn := range ctl.workConnCh {
workConn.Close() workConn.Close()
} }
ctl.mu.Lock()
defer ctl.mu.Unlock()
for _, pxy := range ctl.proxies { for _, pxy := range ctl.proxies {
pxy.Close() pxy.Close()
ctl.svr.DelProxy(pxy.GetName()) ctl.svr.DelProxy(pxy.GetName())
...@@ -303,6 +304,7 @@ func (ctl *Control) manager() { ...@@ -303,6 +304,7 @@ func (ctl *Control) manager() {
if time.Since(ctl.lastPing) > time.Duration(config.ServerCommonCfg.HeartBeatTimeout)*time.Second { if time.Since(ctl.lastPing) > time.Duration(config.ServerCommonCfg.HeartBeatTimeout)*time.Second {
ctl.conn.Warn("heartbeat timeout") ctl.conn.Warn("heartbeat timeout")
ctl.allShutdown.Start() ctl.allShutdown.Start()
return
} }
case rawMsg, ok := <-ctl.readCh: case rawMsg, ok := <-ctl.readCh:
if !ok { if !ok {
......
...@@ -21,6 +21,7 @@ import ( ...@@ -21,6 +21,7 @@ import (
"io" "io"
"net" "net"
"sync" "sync"
"sync/atomic"
"time" "time"
"github.com/fatedier/frp/utils/log" "github.com/fatedier/frp/utils/log"
...@@ -178,6 +179,7 @@ func (sc *SharedConn) WriteBuff(buffer []byte) (err error) { ...@@ -178,6 +179,7 @@ func (sc *SharedConn) WriteBuff(buffer []byte) (err error) {
type StatsConn struct { type StatsConn struct {
Conn Conn
closed int64 // 1 means closed
totalRead int64 totalRead int64
totalWrite int64 totalWrite int64
statsFunc func(totalRead, totalWrite int64) statsFunc func(totalRead, totalWrite int64)
...@@ -203,9 +205,12 @@ func (statsConn *StatsConn) Write(p []byte) (n int, err error) { ...@@ -203,9 +205,12 @@ func (statsConn *StatsConn) Write(p []byte) (n int, err error) {
} }
func (statsConn *StatsConn) Close() (err error) { func (statsConn *StatsConn) Close() (err error) {
err = statsConn.Conn.Close() old := atomic.SwapInt64(&statsConn.closed, 1)
if statsConn.statsFunc != nil { if old != 1 {
statsConn.statsFunc(statsConn.totalRead, statsConn.totalWrite) err = statsConn.Conn.Close()
if statsConn.statsFunc != nil {
statsConn.statsFunc(statsConn.totalRead, statsConn.totalWrite)
}
} }
return return
} }
...@@ -19,7 +19,7 @@ import ( ...@@ -19,7 +19,7 @@ import (
"strings" "strings"
) )
var version string = "0.16.0" var version string = "0.16.1"
func Full() string { func Full() string {
return version return version
......
...@@ -108,7 +108,7 @@ func readHandshake(rd io.Reader) (host string, err error) { ...@@ -108,7 +108,7 @@ func readHandshake(rd io.Reader) (host string, err error) {
return return
} }
if len(data) < 2 { if len(data) < 2 {
err = fmt.Errorf("readHandshake: extension dataLen[%d] is too short") err = fmt.Errorf("readHandshake: extension dataLen[%d] is too short", len(data))
return return
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册