[Red5commits] [red5 commit] r3145 - in java/server/branches/osgi/common: META-INF src/org/red5/server/common src/org/red5/ser...
codesite-noreply at google.com
codesite-noreply at google.com
Fri Oct 3 02:44:50 PDT 2008
Author: steven.gong
Date: Fri Oct 3 02:44:31 2008
New Revision: 3145
Modified:
java/server/branches/osgi/common/META-INF/MANIFEST.MF
java/server/branches/osgi/common/src/org/red5/server/common/BufferExUtils.java
java/server/branches/osgi/common/src/org/red5/server/common/rtmp/impl/BaseRTMPInput.java
java/server/branches/osgi/common/src/org/red5/server/common/rtmp/packet/RTMPPacket.java
Log:
Some bug fix for RTMP decoder
Modified: java/server/branches/osgi/common/META-INF/MANIFEST.MF
==============================================================================
--- java/server/branches/osgi/common/META-INF/MANIFEST.MF (original)
+++ java/server/branches/osgi/common/META-INF/MANIFEST.MF Fri Oct 3
02:44:31 2008
@@ -5,7 +5,9 @@
Bundle-Version: 0.1.0
Export-Package: org.red5.server.common,
org.red5.server.common.amf,
+ org.red5.server.common.amf.impl,
org.red5.server.common.rtmp,
+ org.red5.server.common.rtmp.impl,
org.red5.server.common.rtmp.packet,
org.red5.server.common.service
Import-Package: org.apache.commons.beanutils,
Modified:
java/server/branches/osgi/common/src/org/red5/server/common/BufferExUtils.java
==============================================================================
---
java/server/branches/osgi/common/src/org/red5/server/common/BufferExUtils.java
(original)
+++
java/server/branches/osgi/common/src/org/red5/server/common/BufferExUtils.java
Fri Oct 3 02:44:31 2008
@@ -81,7 +81,7 @@
int srcRemaining = src.remaining();
if (srcRemaining >= length) {
int originLimit = src.limit();
- src.limit(src.position() + srcRemaining);
+ src.limit(src.position() + length);
dest.put(src);
src.limit(originLimit);
} else {
Modified:
java/server/branches/osgi/common/src/org/red5/server/common/rtmp/impl/BaseRTMPInput.java
==============================================================================
---
java/server/branches/osgi/common/src/org/red5/server/common/rtmp/impl/BaseRTMPInput.java
(original)
+++
java/server/branches/osgi/common/src/org/red5/server/common/rtmp/impl/BaseRTMPInput.java
Fri Oct 3 02:44:31 2008
@@ -22,7 +22,7 @@
*/
public abstract class BaseRTMPInput
implements RTMPInput, RTMPConstants {
- private static final int INTERNAL_BUF_CAPACITY = 1024;
+ private static final int INTERNAL_BUF_CAPACITY = 2048;
protected ClassLoader defaultClassLoader;
protected RTMPCodecState codecState;
protected boolean isServerMode;
@@ -41,6 +41,7 @@
codecState = RTMPCodecState.HANDSHAKE_1;
this.isServerMode = isServerMode;
this.internalBuf = BufferEx.allocate(INTERNAL_BUF_CAPACITY);
+ this.internalBuf.setAutoExpand(true);
}
@Override
@@ -91,7 +92,7 @@
packets.add(packet);
packet = read(buf, classLoader);
}
- return (RTMPPacket[]) packets.toArray();
+ return (RTMPPacket[]) packets.toArray(new RTMPPacket[]{});
} catch (RTMPCodecException e) {
buf.position(originPos);
throw e;
@@ -145,6 +146,7 @@
buf.get(handshakeBuf, internalBufLength,
handshakeSize-internalBufLength);
handshake = new RTMPHandshake();
handshake.setHandshakeData(BufferEx.wrap(handshakeBuf));
+ handshake.setSize(handshakeSize);
codecState = nextState;
return handshake;
} else {
@@ -230,7 +232,7 @@
} else if ((channelByte0 & 0x3f) == 1) {
decodeState.channelIdSize = 3;
}
- decodeState.headerType = (channelByte0 & 0x3) >> 6;
+ decodeState.headerType = (channelByte0 & 0x0c0) >> 6;
int headerSize = decodeState.channelIdSize +
SUB_HEADER_SIZE[decodeState.headerType];
decodeState.bytesNeeded = headerSize - 1;
@@ -256,12 +258,14 @@
RTMPHeader lastHeader = lastHeaderMap.get(decodeState.channelId);
RTMPPacketObject decodingPacket =
decodingPacketMap.get(decodeState.channelId);
- if (decodeState.headerType != HEADER_STANDARD && lastHeader == null) {
- throw new RTMPCodecException("Last header not found parsing
headerType " + decodeState.headerType);
- }
if (decodeState.headerType != HEADER_CONTINUE && decodingPacket !=
null) {
throw new RTMPCodecException("Got non-continue header type with
existing decoding packet");
}
+ if (decodeState.headerType != HEADER_STANDARD &&
+ !(decodingPacket != null && decodeState.headerType ==
HEADER_CONTINUE) &&
+ lastHeader == null) {
+ throw new RTMPCodecException("Last header not found parsing
headerType " + decodeState.headerType);
+ }
if (decodingPacket == null) {
long timestamp;
int relativeTS = 0;
@@ -311,9 +315,8 @@
decodingPacket = new RTMPPacketObject(currentHeader);
decodingPacketMap.put(decodeState.channelId, decodingPacket);
}
- decodeState.bytesNeeded =
- (decodingPacket.header.getSize() - decodingPacket.body.position()) %
- chunkSize;
+ int bodyBytesRemaining = decodingPacket.header.getSize() -
decodingPacket.body.position();
+ decodeState.bytesNeeded = bodyBytesRemaining > chunkSize ? chunkSize :
bodyBytesRemaining;
break;
case RTMPDecodeState.DECODE_STATE_NEED_BODY:
continueDecoding = false;
Modified:
java/server/branches/osgi/common/src/org/red5/server/common/rtmp/packet/RTMPPacket.java
==============================================================================
---
java/server/branches/osgi/common/src/org/red5/server/common/rtmp/packet/RTMPPacket.java
(original)
+++
java/server/branches/osgi/common/src/org/red5/server/common/rtmp/packet/RTMPPacket.java
Fri Oct 3 02:44:31 2008
@@ -61,4 +61,10 @@
public void setStreamId(int streamId) {
this.streamId = streamId;
}
+
+ public String toString() {
+ return String.format(
+ "Type: %1$d, Size: %2$d, Channel %3$d, Timestamp %4$d, StreamId %5$d",
+ type, size, channel, timestamp, streamId);
+ }
}
More information about the Red5commits
mailing list