From 0f59b8f329d398c5446e3a4d8550fbb436bc8913 Mon Sep 17 00:00:00 2001
From: Joe Cloud <im@joe.cloud>
Date: Tue, 14 Jan 2020 22:11:12 -0600
Subject: [PATCH 1/4] English grammar fix. (#1619)

---
 utils/vhost/resource.go | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/utils/vhost/resource.go b/utils/vhost/resource.go
index 9553e7ef..5c084306 100644
--- a/utils/vhost/resource.go
+++ b/utils/vhost/resource.go
@@ -41,7 +41,7 @@ const (
 </style>
 </head>
 <body>
-<h1>The page you visit not found.</h1>
+<h1>The page you requested was not found.</h1>
 <p>Sorry, the page you are looking for is currently unavailable.<br/>
 Please try again later.</p>
 <p>The server is powered by <a href="https://github.com/fatedier/frp">frp</a>.</p>

From 4a4cf552af78a3461e95f9c42038198c536549d1 Mon Sep 17 00:00:00 2001
From: fatedier <fatedier@gmail.com>
Date: Tue, 4 Feb 2020 19:41:39 +0800
Subject: [PATCH 2/4] send closeProxy msg to server then client start proxy
 error, fix #1606

---
 client/proxy/proxy_wrapper.go | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/client/proxy/proxy_wrapper.go b/client/proxy/proxy_wrapper.go
index 458fa438..418ef01b 100644
--- a/client/proxy/proxy_wrapper.go
+++ b/client/proxy/proxy_wrapper.go
@@ -112,6 +112,7 @@ func (pw *ProxyWrapper) SetRunningStatus(remoteAddr string, respErr string) erro
 	}
 
 	if err := pw.pxy.Run(); err != nil {
+		pw.close()
 		pw.Status = ProxyStatusStartErr
 		pw.Err = err.Error()
 		pw.lastStartErr = time.Now()
@@ -140,7 +141,10 @@ func (pw *ProxyWrapper) Stop() {
 		pw.monitor.Stop()
 	}
 	pw.Status = ProxyStatusClosed
+	pw.close()
+}
 
+func (pw *ProxyWrapper) close() {
 	pw.handler(event.EvCloseProxy, &event.CloseProxyPayload{
 		CloseProxyMsg: &msg.CloseProxy{
 			ProxyName: pw.Name,
@@ -178,11 +182,7 @@ func (pw *ProxyWrapper) checkWorker() {
 		} else {
 			pw.mu.Lock()
 			if pw.Status == ProxyStatusRunning || pw.Status == ProxyStatusWaitStart {
-				pw.handler(event.EvCloseProxy, &event.CloseProxyPayload{
-					CloseProxyMsg: &msg.CloseProxy{
-						ProxyName: pw.Name,
-					},
-				})
+				pw.close()
 				xl.Trace("change status from [%s] to [%s]", pw.Status, ProxyStatusCheckFailed)
 				pw.Status = ProxyStatusCheckFailed
 			}

From 4feb74cb89400a23b7db9c1f059191f0db6f05d3 Mon Sep 17 00:00:00 2001
From: fatedier <fatedier@gmail.com>
Date: Tue, 4 Feb 2020 21:34:46 +0800
Subject: [PATCH 3/4] doc typo

---
 README_zh.md       | 4 ++--
 conf/frpc_full.ini | 4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/README_zh.md b/README_zh.md
index a7c45242..f01efdf5 100644
--- a/README_zh.md
+++ b/README_zh.md
@@ -546,10 +546,10 @@ allow_ports = 2000-3000,3001,3003,4000-50000
 type = tcp
 local_port = 22
 remote_port = 6000
-bandwith_limit = 1MB
+bandwidth_limit = 1MB
 ```
 
-在代理配置中增加 `bandwith_limit` 字段启用此功能,目前仅支持 `MB` 和 `KB` 单位。
+在代理配置中增加 `bandwidth_limit` 字段启用此功能,目前仅支持 `MB` 和 `KB` 单位。
 
 ### TCP 多路复用
 
diff --git a/conf/frpc_full.ini b/conf/frpc_full.ini
index 8c86acba..c6d3d406 100644
--- a/conf/frpc_full.ini
+++ b/conf/frpc_full.ini
@@ -75,8 +75,8 @@ meta_var2 = 234
 type = tcp
 local_ip = 127.0.0.1
 local_port = 22
-# limit bandwith for this proxy, unit is KB and MB
-bandwith_limit = 1MB
+# limit bandwidth for this proxy, unit is KB and MB
+bandwidth_limit = 1MB
 # true or false, if true, messages between frps and frpc will be encrypted, default is false
 use_encryption = false
 # if true, message will be compressed

From 69fa7ed16e22f1aab8284f508ee0267c3ba84ca7 Mon Sep 17 00:00:00 2001
From: fatedier <fatedier@gmail.com>
Date: Tue, 4 Feb 2020 21:43:37 +0800
Subject: [PATCH 4/4] bump version to v0.31.2

---
 utils/version/version.go | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/utils/version/version.go b/utils/version/version.go
index dac39749..f0fe22f3 100644
--- a/utils/version/version.go
+++ b/utils/version/version.go
@@ -19,7 +19,7 @@ import (
 	"strings"
 )
 
-var version string = "0.31.1"
+var version string = "0.31.2"
 
 func Full() string {
 	return version