Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
企猫商务
frp
提交
f90028cf
F
frp
项目概览
企猫商务
/
frp
与 Fork 源项目一致
从无法访问的项目Fork
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
F
frp
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
f90028cf
编写于
3月 10, 2017
作者:
F
fatedier
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Use encryption in frp protocol.
上级
f83a2a73
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
38 addition
and
10 deletion
+38
-10
client/control.go
client/control.go
+16
-4
client/proxy.go
client/proxy.go
+3
-0
server/control.go
server/control.go
+17
-5
server/proxy.go
server/proxy.go
+1
-0
utils/version/version_test.go
utils/version/version_test.go
+1
-1
未找到文件。
client/control.go
浏览文件 @
f90028cf
...
...
@@ -23,6 +23,7 @@ import (
"github.com/fatedier/frp/models/config"
"github.com/fatedier/frp/models/msg"
"github.com/fatedier/frp/utils/crypto"
"github.com/fatedier/frp/utils/log"
"github.com/fatedier/frp/utils/net"
"github.com/fatedier/frp/utils/util"
...
...
@@ -135,7 +136,7 @@ func (ctl *Control) NewWorkConn() {
var
startMsg
msg
.
StartWorkConn
if
err
=
msg
.
ReadMsgInto
(
workConn
,
&
startMsg
);
err
!=
nil
{
ctl
.
Error
(
"work connection closed
and no response from server
, %v"
,
err
)
ctl
.
Error
(
"work connection closed, %v"
,
err
)
workConn
.
Close
()
return
}
...
...
@@ -205,12 +206,17 @@ func (ctl *Control) reader() {
ctl
.
Error
(
"panic error: %v"
,
err
)
}
}()
defer
close
(
ctl
.
closedCh
)
encReader
,
err
:=
crypto
.
NewReader
(
ctl
.
conn
,
[]
byte
(
config
.
ClientCommonCfg
.
PrivilegeToken
))
if
err
!=
nil
{
ctl
.
conn
.
Error
(
"crypto new reader error: %v"
,
err
)
return
}
for
{
if
m
,
err
:=
msg
.
ReadMsg
(
ctl
.
conn
);
err
!=
nil
{
if
m
,
err
:=
msg
.
ReadMsg
(
encReader
);
err
!=
nil
{
if
err
==
io
.
EOF
{
ctl
.
Debug
(
"read from control connection EOF"
)
close
(
ctl
.
closedCh
)
return
}
else
{
ctl
.
Warn
(
"read error: %v"
,
err
)
...
...
@@ -223,12 +229,18 @@ func (ctl *Control) reader() {
}
func
(
ctl
*
Control
)
writer
()
{
encWriter
,
err
:=
crypto
.
NewWriter
(
ctl
.
conn
,
[]
byte
(
config
.
ClientCommonCfg
.
PrivilegeToken
))
if
err
!=
nil
{
ctl
.
conn
.
Error
(
"crypto new writer error: %v"
,
err
)
ctl
.
conn
.
Close
()
return
}
for
{
if
m
,
ok
:=
<-
ctl
.
sendCh
;
!
ok
{
ctl
.
Info
(
"control writer is closing"
)
return
}
else
{
if
err
:=
msg
.
WriteMsg
(
ctl
.
conn
,
m
);
err
!=
nil
{
if
err
:=
msg
.
WriteMsg
(
encWriter
,
m
);
err
!=
nil
{
ctl
.
Warn
(
"write message to control connection error: %v"
,
err
)
return
}
...
...
client/proxy.go
浏览文件 @
f90028cf
...
...
@@ -23,8 +23,11 @@ import (
"github.com/fatedier/frp/utils/net"
)
// Proxy defines how to work for different proxy type.
type
Proxy
interface
{
Run
()
// InWorkConn accept work connections registered to server.
InWorkConn
(
conn
net
.
Conn
)
Close
()
}
...
...
server/control.go
浏览文件 @
f90028cf
...
...
@@ -9,6 +9,7 @@ import (
"github.com/fatedier/frp/models/config"
"github.com/fatedier/frp/models/consts"
"github.com/fatedier/frp/models/msg"
"github.com/fatedier/frp/utils/crypto"
"github.com/fatedier/frp/utils/errors"
"github.com/fatedier/frp/utils/net"
"github.com/fatedier/frp/utils/shutdown"
...
...
@@ -81,14 +82,14 @@ func NewControl(svr *Service, ctlConn net.Conn, loginMsg *msg.Login) *Control {
// Start send a login success message to client and start working.
func
(
ctl
*
Control
)
Start
()
{
go
ctl
.
writer
()
ctl
.
sendCh
<-
&
msg
.
LoginResp
{
loginRespMsg
:=
&
msg
.
LoginResp
{
Version
:
version
.
Full
(),
RunId
:
ctl
.
runId
,
Error
:
""
,
}
msg
.
WriteMsg
(
ctl
.
conn
,
loginRespMsg
)
go
ctl
.
writer
()
for
i
:=
0
;
i
<
ctl
.
poolCount
;
i
++
{
ctl
.
sendCh
<-
&
msg
.
ReqWorkConn
{}
}
...
...
@@ -182,12 +183,18 @@ func (ctl *Control) writer() {
defer
ctl
.
allShutdown
.
Start
()
defer
ctl
.
writerShutdown
.
Done
()
encWriter
,
err
:=
crypto
.
NewWriter
(
ctl
.
conn
,
[]
byte
(
config
.
ServerCommonCfg
.
PrivilegeToken
))
if
err
!=
nil
{
ctl
.
conn
.
Error
(
"crypto new writer error: %v"
,
err
)
ctl
.
allShutdown
.
Start
()
return
}
for
{
if
m
,
ok
:=
<-
ctl
.
sendCh
;
!
ok
{
ctl
.
conn
.
Info
(
"control writer is closing"
)
return
}
else
{
if
err
:=
msg
.
WriteMsg
(
ctl
.
conn
,
m
);
err
!=
nil
{
if
err
:=
msg
.
WriteMsg
(
encWriter
,
m
);
err
!=
nil
{
ctl
.
conn
.
Warn
(
"write message to control connection error: %v"
,
err
)
return
}
...
...
@@ -205,8 +212,13 @@ func (ctl *Control) reader() {
defer
ctl
.
allShutdown
.
Start
()
defer
ctl
.
readerShutdown
.
Done
()
encReader
,
err
:=
crypto
.
NewReader
(
ctl
.
conn
,
[]
byte
(
config
.
ServerCommonCfg
.
PrivilegeToken
))
if
err
!=
nil
{
ctl
.
conn
.
Error
(
"crypto new reader error: %v"
,
err
)
return
}
for
{
if
m
,
err
:=
msg
.
ReadMsg
(
ctl
.
conn
);
err
!=
nil
{
if
m
,
err
:=
msg
.
ReadMsg
(
encReader
);
err
!=
nil
{
if
err
==
io
.
EOF
{
ctl
.
conn
.
Debug
(
"control connection closed"
)
return
...
...
server/proxy.go
浏览文件 @
f90028cf
...
...
@@ -165,6 +165,7 @@ func (pxy *UdpProxy) Close() {
}
// HandleUserTcpConnection is used for incoming tcp user connections.
// It can be used for tcp, http, https type.
func
HandleUserTcpConnection
(
pxy
Proxy
,
userConn
net
.
Conn
)
{
defer
userConn
.
Close
()
ctl
:=
pxy
.
GetControl
()
...
...
utils/version/version_test.go
浏览文件 @
f90028cf
...
...
@@ -61,5 +61,5 @@ func TestCompact(t *testing.T) {
assert
.
True
(
ok
)
ok
,
_
=
Compat
(
"0.10.0"
)
assert
.
Fals
e
(
ok
)
assert
.
Tru
e
(
ok
)
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录