Skip to content

Commit

Permalink
Merge pull request fatedier#238 from fatedier/dev
Browse files Browse the repository at this point in the history
bump version to 0.9.3
  • Loading branch information
fatedier authored Jan 17, 2017
2 parents edb97ab + f9a0d89 commit 3f97494
Show file tree
Hide file tree
Showing 7 changed files with 83 additions and 46 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -497,3 +497,4 @@ Donate money by [paypal](https://www.paypal.me/fatedier) to my account **fatedie
* [Manfred Touron](https://github.com/moul)
* [xuebing1110](https://github.com/xuebing1110)
* [Anbitioner](https://github.com/bingtianbaihua)
* [LitleCarl](https://github.com/LitleCarl)
1 change: 1 addition & 0 deletions README_zh.md
Original file line number Diff line number Diff line change
Expand Up @@ -516,3 +516,4 @@ frp 交流群:606194980 (QQ 群号)
* [Manfred Touron](https://github.com/moul)
* [xuebing1110](https://github.com/xuebing1110)
* [Anbitioner](https://github.com/bingtianbaihua)
* [LitleCarl](https://github.com/LitleCarl)
28 changes: 14 additions & 14 deletions src/cmd/frps/control.go
Original file line number Diff line number Diff line change
Expand Up @@ -268,6 +268,20 @@ func doLogin(req *msg.ControlReq, c *conn.Conn) (ret int64, info string, s *serv
return
}
}

if s.SubDomain != "" {
if strings.Contains(s.SubDomain, ".") || strings.Contains(s.SubDomain, "*") {
info = fmt.Sprintf("ProxyName [%s], '.' and '*' is not supported in subdomain", req.ProxyName)
log.Warn(info)
return
}
if server.SubDomainHost == "" {
info = fmt.Sprintf("ProxyName [%s], subdomain is not supported because this feature is not enabled by remote server", req.ProxyName)
log.Warn(info)
return
}
s.SubDomain = s.SubDomain + "." + server.SubDomainHost
}
}
err := server.CreateProxy(s)
if err != nil {
Expand Down Expand Up @@ -297,20 +311,6 @@ func doLogin(req *msg.ControlReq, c *conn.Conn) (ret int64, info string, s *serv
s.HttpUserName = req.HttpUserName
s.HttpPassWord = req.HttpPassWord

// package URL
if req.SubDomain != "" {
if strings.Contains(req.SubDomain, ".") || strings.Contains(req.SubDomain, "*") {
info = fmt.Sprintf("ProxyName [%s], '.' or '*' is not supported in subdomain", req.ProxyName)
log.Warn(info)
return
}
if server.SubDomainHost == "" {
info = fmt.Sprintf("ProxyName [%s], subdomain in not supported because this feature is not enabled by remote server", req.ProxyName)
log.Warn(info)
return
}
s.SubDomain = req.SubDomain + "." + server.SubDomainHost
}
if req.PoolCount > server.MaxPoolCount {
s.PoolCount = server.MaxPoolCount
} else if req.PoolCount < 0 {
Expand Down
44 changes: 24 additions & 20 deletions src/models/client/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -243,44 +243,48 @@ func LoadConf(confFile string) (err error) {
}
} else if proxyClient.Type == "http" {
// custom_domains
domainStr, ok := section["custom_domains"]
tmpStr, ok = section["custom_domains"]
if ok {
proxyClient.CustomDomains = strings.Split(domainStr, ",")
if len(proxyClient.CustomDomains) == 0 {
ok = false
} else {
for i, domain := range proxyClient.CustomDomains {
proxyClient.CustomDomains[i] = strings.ToLower(strings.TrimSpace(domain))
}
proxyClient.CustomDomains = strings.Split(tmpStr, ",")
for i, domain := range proxyClient.CustomDomains {
proxyClient.CustomDomains[i] = strings.ToLower(strings.TrimSpace(domain))
}
}

if !ok && proxyClient.SubDomain == "" {
// subdomain
tmpStr, ok = section["subdomain"]
if ok {
proxyClient.SubDomain = tmpStr
}

if len(proxyClient.CustomDomains) == 0 && proxyClient.SubDomain == "" {
return fmt.Errorf("Parse conf error: proxy [%s] custom_domains and subdomain should set at least one of them when type is http", proxyClient.Name)
}

// locations
locations, ok := section["locations"]
tmpStr, ok = section["locations"]
if ok {
proxyClient.Locations = strings.Split(locations, ",")
proxyClient.Locations = strings.Split(tmpStr, ",")
} else {
proxyClient.Locations = []string{""}
}
} else if proxyClient.Type == "https" {
// custom_domains
domainStr, ok := section["custom_domains"]
tmpStr, ok = section["custom_domains"]
if ok {
proxyClient.CustomDomains = strings.Split(domainStr, ",")
if len(proxyClient.CustomDomains) == 0 {
ok = false
} else {
for i, domain := range proxyClient.CustomDomains {
proxyClient.CustomDomains[i] = strings.ToLower(strings.TrimSpace(domain))
}
proxyClient.CustomDomains = strings.Split(tmpStr, ",")
for i, domain := range proxyClient.CustomDomains {
proxyClient.CustomDomains[i] = strings.ToLower(strings.TrimSpace(domain))
}
}

if !ok && proxyClient.SubDomain == "" {
// subdomain
tmpStr, ok = section["subdomain"]
if ok {
proxyClient.SubDomain = tmpStr
}

if len(proxyClient.CustomDomains) == 0 && proxyClient.SubDomain == "" {
return fmt.Errorf("Parse conf error: proxy [%s] custom_domains and subdomain should set at least one of them when type is https", proxyClient.Name)
}
}
Expand Down
44 changes: 34 additions & 10 deletions src/models/server/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -300,9 +300,6 @@ func loadProxyConf(confFile string) (proxyServers map[string]*ProxyServer, err e
domainStr, ok := section["custom_domains"]
if ok {
proxyServer.CustomDomains = strings.Split(domainStr, ",")
if len(proxyServer.CustomDomains) == 0 {
return proxyServers, fmt.Errorf("Parse conf error: proxy [%s] custom_domains must be set when type is http", proxyServer.Name)
}
for i, domain := range proxyServer.CustomDomains {
domain = strings.ToLower(strings.TrimSpace(domain))
// custom domain should not belong to subdomain_host
Expand All @@ -311,8 +308,23 @@ func loadProxyConf(confFile string) (proxyServers map[string]*ProxyServer, err e
}
proxyServer.CustomDomains[i] = domain
}
} else {
return proxyServers, fmt.Errorf("Parse conf error: proxy [%s] custom_domains must be set when type is http", proxyServer.Name)
}

// subdomain
subdomainStr, ok := section["subdomain"]
if ok {
if strings.Contains(subdomainStr, ".") || strings.Contains(subdomainStr, "*") {
return proxyServers, fmt.Errorf("Parse conf error: proxy [%s] '.' and '*' is not supported in subdomain", proxyServer.Name)
}

if SubDomainHost == "" {
return proxyServers, fmt.Errorf("Parse conf error: proxy [%s] subdomain is not supported because subdomain_host is empty", proxyServer.Name)
}
proxyServer.SubDomain = subdomainStr + "." + SubDomainHost
}

if len(proxyServer.CustomDomains) == 0 && proxyServer.SubDomain == "" {
return proxyServers, fmt.Errorf("Parse conf error: proxy [%s] custom_domains and subdomain should set at least one of them when type is http", proxyServer.Name)
}

// locations
Expand All @@ -329,18 +341,30 @@ func loadProxyConf(confFile string) (proxyServers map[string]*ProxyServer, err e
domainStr, ok := section["custom_domains"]
if ok {
proxyServer.CustomDomains = strings.Split(domainStr, ",")
if len(proxyServer.CustomDomains) == 0 {
return proxyServers, fmt.Errorf("Parse conf error: proxy [%s] custom_domains must be set when type is https", proxyServer.Name)
}
for i, domain := range proxyServer.CustomDomains {
domain = strings.ToLower(strings.TrimSpace(domain))
if SubDomainHost != "" && strings.Contains(domain, SubDomainHost) {
return proxyServers, fmt.Errorf("Parse conf error: proxy [%s] custom domain should not belong to subdomain_host", proxyServer.Name)
}
proxyServer.CustomDomains[i] = domain
}
} else {
return proxyServers, fmt.Errorf("Parse conf error: proxy [%s] custom_domains must be set when type is https", proxyServer.Name)
}

// subdomain
subdomainStr, ok := section["subdomain"]
if ok {
if strings.Contains(subdomainStr, ".") || strings.Contains(subdomainStr, "*") {
return proxyServers, fmt.Errorf("Parse conf error: proxy [%s] '.' and '*' is not supported in subdomain", proxyServer.Name)
}

if SubDomainHost == "" {
return proxyServers, fmt.Errorf("Parse conf error: proxy [%s] subdomain is not supported because subdomain_host is empty", proxyServer.Name)
}
proxyServer.SubDomain = subdomainStr + "." + SubDomainHost
}

if len(proxyServer.CustomDomains) == 0 && proxyServer.SubDomain == "" {
return proxyServers, fmt.Errorf("Parse conf error: proxy [%s] custom_domains and subdomain should set at least one of them when type is https", proxyServer.Name)
}
}
proxyServers[proxyServer.Name] = proxyServer
Expand Down
9 changes: 8 additions & 1 deletion src/models/server/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ func NewProxyServerFromCtlMsg(req *msg.ControlReq) (p *ProxyServer) {
p.ListenPort = VhostHttpsPort
}
p.CustomDomains = req.CustomDomains
p.SubDomain = req.SubDomain
p.Locations = req.Locations
p.HostHeaderRewrite = req.HostHeaderRewrite
p.HttpUserName = req.HttpUserName
Expand Down Expand Up @@ -285,7 +286,7 @@ func (p *ProxyServer) Close() {
p.Release()

// if the proxy created by PrivilegeMode, delete it when closed
if p.PrivilegeMode && oldStatus != consts.Closed {
if p.PrivilegeMode && oldStatus == consts.Working {
// NOTE: this will take the global ProxyServerMap's lock
// if we only want to release resources, use Release() instead
DeleteProxy(p.Name)
Expand Down Expand Up @@ -444,6 +445,12 @@ func (p *ProxyServer) getWorkConn() (workConn *conn.Conn, err error) {
}

func (p *ProxyServer) connectionPoolManager(closeCh <-chan struct{}) {
defer func() {
if r := recover(); r != nil {
log.Warn("ProxyName [%s], connectionPoolManager panic %v", p.Name, r)
}
}()

for {
// check if we need more work connections and send messages to frpc to get more
time.Sleep(time.Duration(2) * time.Second)
Expand Down
2 changes: 1 addition & 1 deletion src/utils/version/version.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import (
"strings"
)

var version string = "0.9.2"
var version string = "0.9.3"

func Full() string {
return version
Expand Down

0 comments on commit 3f97494

Please sign in to comment.