Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
touzizhuo03
Dubbo
提交
e062b692
D
Dubbo
项目概览
touzizhuo03
/
Dubbo
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
Dubbo
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
e062b692
编写于
9月 02, 2012
作者:
oldratlee
🔥
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'origin/dubbo-2.4.x-dev' into dubbo-2.4.x-dev
上级
dad4a2a6
e3af61e5
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
15 addition
and
33 deletion
+15
-33
dubbo-remoting/dubbo-remoting-api/src/main/java/com/alibaba/dubbo/remoting/exchange/codec/ExchangeCodec.java
.../alibaba/dubbo/remoting/exchange/codec/ExchangeCodec.java
+1
-1
dubbo-remoting/dubbo-remoting-api/src/test/java/com/alibaba/dubbo/remoting/codec/ExchangeCodecTest.java
...a/com/alibaba/dubbo/remoting/codec/ExchangeCodecTest.java
+14
-32
未找到文件。
dubbo-remoting/dubbo-remoting-api/src/main/java/com/alibaba/dubbo/remoting/exchange/codec/ExchangeCodec.java
浏览文件 @
e062b692
...
@@ -113,6 +113,7 @@ public class ExchangeCodec extends TelnetCodec {
...
@@ -113,6 +113,7 @@ public class ExchangeCodec extends TelnetCodec {
// get data length.
// get data length.
int
len
=
Bytes
.
bytes2int
(
header
,
12
);
int
len
=
Bytes
.
bytes2int
(
header
,
12
);
checkPayload
(
channel
,
len
);
int
tt
=
len
+
HEADER_LENGTH
;
int
tt
=
len
+
HEADER_LENGTH
;
if
(
readable
<
tt
)
{
if
(
readable
<
tt
)
{
...
@@ -124,7 +125,6 @@ public class ExchangeCodec extends TelnetCodec {
...
@@ -124,7 +125,6 @@ public class ExchangeCodec extends TelnetCodec {
is
=
StreamUtils
.
limitedInputStream
(
is
,
len
);
is
=
StreamUtils
.
limitedInputStream
(
is
,
len
);
try
{
try
{
checkPayload
(
channel
,
len
);
return
decodeBody
(
channel
,
is
,
header
);
return
decodeBody
(
channel
,
is
,
header
);
}
finally
{
}
finally
{
if
(
is
.
available
()
>
0
)
{
if
(
is
.
available
()
>
0
)
{
...
...
dubbo-remoting/dubbo-remoting-api/src/test/java/com/alibaba/dubbo/remoting/codec/ExchangeCodecTest.java
浏览文件 @
e062b692
...
@@ -151,7 +151,18 @@ public class ExchangeCodecTest extends TelnetCodecTest{
...
@@ -151,7 +151,18 @@ public class ExchangeCodecTest extends TelnetCodecTest{
byte
[]
header
=
new
byte
[]
{
MAGIC_HIGH
,
MAGIC_LOW
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
};
byte
[]
header
=
new
byte
[]
{
MAGIC_HIGH
,
MAGIC_LOW
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
};
testDecode_assertEquals
(
header
,
TelnetCodec
.
NEED_MORE_INPUT
);
testDecode_assertEquals
(
header
,
TelnetCodec
.
NEED_MORE_INPUT
);
}
}
@Test
public
void
test_Decode_Check_Payload
()
throws
IOException
{
byte
[]
header
=
new
byte
[]{
MAGIC_HIGH
,
MAGIC_LOW
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
};
byte
[]
request
=
assemblyDataProtocol
(
header
);
try
{
testDecode_assertEquals
(
request
,
TelnetCodec
.
NEED_MORE_INPUT
);
Assert
.
fail
();
}
catch
(
IOException
expected
)
{
Assert
.
assertTrue
(
expected
.
getMessage
().
startsWith
(
"Data length too large: "
+
Bytes
.
bytes2int
(
new
byte
[]{
1
,
1
,
1
,
1
})));
}
}
@Test
@Test
public
void
test_Decode_Body_Need_Readmore
()
throws
IOException
{
public
void
test_Decode_Body_Need_Readmore
()
throws
IOException
{
byte
[]
header
=
new
byte
[]
{
MAGIC_HIGH
,
MAGIC_LOW
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
1
,
1
,
'a'
,
'a'
};
byte
[]
header
=
new
byte
[]
{
MAGIC_HIGH
,
MAGIC_LOW
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
1
,
1
,
'a'
,
'a'
};
...
@@ -320,7 +331,7 @@ public class ExchangeCodecTest extends TelnetCodecTest{
...
@@ -320,7 +331,7 @@ public class ExchangeCodecTest extends TelnetCodecTest{
Response
response
=
new
Response
();
Response
response
=
new
Response
();
response
.
setHeartbeat
(
true
);
response
.
setHeartbeat
(
true
);
response
.
setId
(
1001
l
);
response
.
setId
(
1001
l
);
response
.
setStatus
((
byte
)
20
);
response
.
setStatus
((
byte
)
20
);
response
.
setVersion
(
"11"
);
response
.
setVersion
(
"11"
);
Person
person
=
new
Person
();
Person
person
=
new
Person
();
response
.
setResult
(
person
);
response
.
setResult
(
person
);
...
@@ -407,36 +418,6 @@ public class ExchangeCodecTest extends TelnetCodecTest{
...
@@ -407,36 +418,6 @@ public class ExchangeCodecTest extends TelnetCodecTest{
Assert
.
assertTrue
(
date
.
equals
(
decodedRequest
.
getData
()));
Assert
.
assertTrue
(
date
.
equals
(
decodedRequest
.
getData
()));
}
}
@Test
public
void
testMessageLengthExceedPayloadLimit
()
throws
Exception
{
Request
request
=
new
Request
(
1L
);
request
.
setData
(
"hello"
);
UnsafeByteArrayOutputStream
bos
=
new
UnsafeByteArrayOutputStream
(
512
);
Channel
channel
=
getCliendSideChannel
(
url
);
codec
.
encode
(
channel
,
bos
,
request
);
byte
[]
requestMessage
=
bos
.
toByteArray
();
byte
[]
message
=
new
byte
[
requestMessage
.
length
*
2
];
System
.
arraycopy
(
requestMessage
,
0
,
message
,
0
,
requestMessage
.
length
);
System
.
arraycopy
(
requestMessage
,
0
,
message
,
requestMessage
.
length
,
requestMessage
.
length
);
channel
=
getServerSideChannel
(
url
.
addParameter
(
Constants
.
PAYLOAD_KEY
,
requestMessage
.
length
-
16
/* head length */
-
2
));
UnsafeByteArrayInputStream
bis
=
new
UnsafeByteArrayInputStream
(
message
);
try
{
codec
.
decode
(
channel
,
bis
);
Assert
.
fail
();
}
catch
(
IOException
e
)
{
Assert
.
assertTrue
(
e
.
getMessage
().
startsWith
(
"Data length too large: "
+
(
requestMessage
.
length
-
16
/* head length */
)));
}
channel
=
getServerSideChannel
(
url
.
addParameter
(
Constants
.
PAYLOAD_KEY
,
Constants
.
DEFAULT_PAYLOAD
));
Object
object
=
codec
.
decode
(
channel
,
bis
);
Assert
.
assertTrue
(
object
instanceof
Request
);
Request
decodeRequest
=
(
Request
)
object
;
Assert
.
assertEquals
(
request
.
getId
(),
decodeRequest
.
getId
());
Assert
.
assertEquals
(
request
.
getData
(),
decodeRequest
.
getData
());
}
@Test
@Test
public
void
testMessageLengthExceedPayloadLimitWhenEncode
()
throws
Exception
{
public
void
testMessageLengthExceedPayloadLimitWhenEncode
()
throws
Exception
{
Request
request
=
new
Request
(
1L
);
Request
request
=
new
Request
(
1L
);
...
@@ -458,5 +439,6 @@ public class ExchangeCodecTest extends TelnetCodecTest{
...
@@ -458,5 +439,6 @@ public class ExchangeCodecTest extends TelnetCodecTest{
Assert
.
assertTrue
(
channel
.
getReceivedMessage
()
instanceof
Response
);
Assert
.
assertTrue
(
channel
.
getReceivedMessage
()
instanceof
Response
);
Response
receiveMessage
=
(
Response
)
channel
.
getReceivedMessage
();
Response
receiveMessage
=
(
Response
)
channel
.
getReceivedMessage
();
Assert
.
assertEquals
(
Response
.
BAD_RESPONSE
,
receiveMessage
.
getStatus
());
Assert
.
assertEquals
(
Response
.
BAD_RESPONSE
,
receiveMessage
.
getStatus
());
Assert
.
assertTrue
(
receiveMessage
.
getErrorMessage
().
contains
(
"Data length too large: "
));
}
}
}
}
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录