Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
G
go-ipfs
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
jihao
go-ipfs
Commits
a8069024
提交
a8069024
authored
10月 28, 2014
作者:
Jeromy
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
cut down on allocations
上级
02792054
隐藏空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
29 行增加
和
26 行删除
+29
-26
chan.go
Godeps/_workspace/src/github.com/jbenet/go-msgio/chan.go
+3
-8
msgio.go
Godeps/_workspace/src/github.com/jbenet/go-msgio/msgio.go
+19
-10
handshake.go
crypto/spipe/handshake.go
+6
-7
conn.go
net/conn/conn.go
+1
-1
没有找到文件。
Godeps/_workspace/src/github.com/jbenet/go-msgio/chan.go
浏览文件 @
a8069024
...
...
@@ -33,7 +33,7 @@ func NewChanWithPool(chanSize int, pool *sync.Pool) *Chan {
func
(
s
*
Chan
)
ReadFrom
(
r
io
.
Reader
,
maxMsgLen
int
)
{
// new buffer per message
// if bottleneck, cycle around a set of buffers
mr
:=
NewReader
(
r
)
mr
:=
NewReader
(
r
,
s
.
BufPool
)
if
s
.
BufPool
==
nil
{
s
.
BufPool
=
new
(
sync
.
Pool
)
s
.
BufPool
.
New
=
func
()
interface
{}
{
...
...
@@ -42,12 +42,7 @@ func (s *Chan) ReadFrom(r io.Reader, maxMsgLen int) {
}
Loop
:
for
{
bufi
:=
s
.
BufPool
.
Get
()
buf
,
ok
:=
bufi
.
([]
byte
)
if
!
ok
{
panic
(
"Got invalid type from sync pool!"
)
}
l
,
err
:=
mr
.
ReadMsg
(
buf
)
buf
,
err
:=
mr
.
ReadMsg
()
if
err
!=
nil
{
if
err
==
io
.
EOF
{
break
Loop
// done
...
...
@@ -61,7 +56,7 @@ Loop:
select
{
case
<-
s
.
CloseChan
:
break
Loop
// told we're done
case
s
.
MsgChan
<-
buf
[
:
l
]
:
case
s
.
MsgChan
<-
buf
:
// ok seems fine. send it away
}
}
...
...
Godeps/_workspace/src/github.com/jbenet/go-msgio/msgio.go
浏览文件 @
a8069024
...
...
@@ -3,6 +3,7 @@ package msgio
import
(
"encoding/binary"
"io"
"sync"
)
var
NBO
=
binary
.
BigEndian
...
...
@@ -17,7 +18,7 @@ type WriteCloser interface {
}
type
Reader
interface
{
ReadMsg
(
[]
byte
)
(
int
,
error
)
ReadMsg
(
)
([]
byte
,
error
)
}
type
ReadCloser
interface
{
...
...
@@ -63,22 +64,30 @@ func (s *Writer_) Close() error {
type
Reader_
struct
{
R
io
.
Reader
lbuf
[]
byte
bp
*
sync
.
Pool
}
func
NewReader
(
r
io
.
Reader
)
ReadCloser
{
return
&
Reader_
{
r
,
make
([]
byte
,
4
)
}
func
NewReader
(
r
io
.
Reader
,
bufpool
*
sync
.
Pool
)
ReadCloser
{
return
&
Reader_
{
R
:
r
,
lbuf
:
make
([]
byte
,
4
),
bp
:
bufpool
}
}
func
(
s
*
Reader_
)
ReadMsg
(
msg
[]
byte
)
(
int
,
error
)
{
func
(
s
*
Reader_
)
ReadMsg
(
)
([]
byte
,
error
)
{
if
_
,
err
:=
io
.
ReadFull
(
s
.
R
,
s
.
lbuf
);
err
!=
nil
{
return
0
,
err
return
nil
,
err
}
bufi
:=
s
.
bp
.
Get
()
buf
,
ok
:=
bufi
.
([]
byte
)
if
!
ok
{
panic
(
"invalid type in pool!"
)
}
length
:=
int
(
NBO
.
Uint32
(
s
.
lbuf
))
if
length
<
0
||
length
>
len
(
msg
)
{
return
0
,
io
.
ErrShortBuffer
if
length
<
0
||
length
>
len
(
buf
)
{
return
nil
,
io
.
ErrShortBuffer
}
_
,
err
:=
io
.
ReadFull
(
s
.
R
,
msg
[
:
length
])
return
length
,
err
_
,
err
:=
io
.
ReadFull
(
s
.
R
,
buf
[
:
length
])
return
buf
[
:
length
]
,
err
}
func
(
s
*
Reader_
)
Close
()
error
{
...
...
@@ -95,7 +104,7 @@ type ReadWriter_ struct {
func
NewReadWriter
(
rw
io
.
ReadWriter
)
ReadWriter
{
return
&
ReadWriter_
{
Reader
:
NewReader
(
rw
),
Reader
:
NewReader
(
rw
,
nil
),
Writer
:
NewWriter
(
rw
),
}
}
...
...
crypto/spipe/handshake.go
浏览文件 @
a8069024
...
...
@@ -303,21 +303,20 @@ func (s *SecurePipe) handleSecureIn(hashType, cipherType string, tIV, tCKey, tMK
}
mark
:=
len
(
data
)
-
macSize
buff
:=
make
([]
byte
,
mark
)
theirCipher
.
XORKeyStream
(
buff
,
data
[
0
:
mark
])
theirMac
.
Write
(
data
[
0
:
mark
])
expected
:=
theirMac
.
Sum
(
nil
)
theirMac
.
Reset
()
hmacOk
:=
hmac
.
Equal
(
data
[
mark
:
],
expected
)
if
hmacOk
{
s
.
Duplex
.
In
<-
buff
}
else
{
if
!
hmacOk
{
s
.
Duplex
.
In
<-
nil
continue
}
theirCipher
.
XORKeyStream
(
data
,
data
[
0
:
mark
])
s
.
Duplex
.
In
<-
data
[
:
mark
]
}
}
...
...
net/conn/conn.go
浏览文件 @
a8069024
...
...
@@ -41,7 +41,7 @@ func init() {
func
ReleaseBuffer
(
b
[]
byte
)
{
log
.
Warningf
(
"Releasing buffer! (cap,size = %d, %d)"
,
cap
(
b
),
len
(
b
))
if
cap
(
b
)
!=
MaxMessageSize
{
log
.
Warning
(
"Release buffer failed
."
)
log
.
Warning
(
"Release buffer failed
(cap, size = %d, %d)"
,
cap
(
b
),
len
(
b
)
)
return
}
BufferPool
.
Put
(
b
[
:
cap
(
b
)])
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论