[Red5commits] [1713] fixed buffers being too small for big channel ids
jbauch
luke at codegent.com
Sat Feb 10 03:00:06 EST 2007
fixed buffers being too small for big channel ids
Timestamp: 02/10/07 02:38:52 EST (less than one hour ago)
Change: 1713
Author: jbauch
Files (see diff or trac for details):
java/server/trunk/src/org/red5/server/net/rtmp/codec/RTMPProtocolEncoder.java
Trac: http://mirror1.cvsdude.com/trac/osflash/red5/changeset/1713
Index: /java/server/trunk/src/org/red5/server/net/rtmp/codec/RTMPProtocolEncoder.java
===================================================================
--- /java/server/trunk/src/org/red5/server/net/rtmp/codec/RTMPProtocolEncoder.java (revision 1710)
+++ /java/server/trunk/src/org/red5/server/net/rtmp/codec/RTMPProtocolEncoder.java (revision 1713)
@@ -131,9 +131,15 @@
rtmp.setLastWritePacket(channelId, packet);
+
final int chunkSize = rtmp.getWriteChunkSize();
+ int chunkHeaderSize = 1;
+ if (header.getChannelId() > 320)
+ chunkHeaderSize = 3;
+ else if (header.getChannelId() > 63)
+ chunkHeaderSize = 2;
final int numChunks = (int) Math.ceil(header.getSize()
/ (float) chunkSize);
final int bufSize = header.getSize() + headers.limit()
- + (numChunks > 0 ? numChunks - 1 : 0);
+ + (numChunks > 0 ? (numChunks - 1) * chunkHeaderSize : 0);
final ByteBuffer out = ByteBuffer.allocate(bufSize);
@@ -186,6 +192,11 @@
}
+ int channelIdAdd = 0;
+ if (header.getChannelId() > 320)
+ channelIdAdd = 2;
+ else if (header.getChannelId() > 63)
+ channelIdAdd = 1;
final ByteBuffer buf = ByteBuffer.allocate(RTMPUtils
- .getHeaderLength(headerType));
+ .getHeaderLength(headerType) + channelIdAdd);
RTMPUtils.encodeHeaderByte(buf, headerType, header
.getChannelId());
Note:
Diffs are chopped if more than 25k.
This is to get past the limit on the mailing list.
More information about the Red5commits
mailing list