[Red5commits] [red5 commit] r3192 - in java/server/trunk/src/org/red5/server/net/rtmp: . codec event
codesite-noreply at google.com
codesite-noreply at google.com
Fri Oct 10 08:18:05 PDT 2008
Author: mondain
Date: Fri Oct 10 08:17:24 2008
New Revision: 3192
Modified:
java/server/trunk/src/org/red5/server/net/rtmp/Channel.java
java/server/trunk/src/org/red5/server/net/rtmp/RTMPHandler.java
java/server/trunk/src/org/red5/server/net/rtmp/RTMPHandshake.java
java/server/trunk/src/org/red5/server/net/rtmp/RTMPMinaConnection.java
java/server/trunk/src/org/red5/server/net/rtmp/codec/RTMPProtocolDecoder.java
java/server/trunk/src/org/red5/server/net/rtmp/codec/RTMPProtocolEncoder.java
java/server/trunk/src/org/red5/server/net/rtmp/event/FLVData.java
Log:
Applied handshake fix from mp4 branch to possibly fix the "long handshake"
error.
Modified: java/server/trunk/src/org/red5/server/net/rtmp/Channel.java
==============================================================================
--- java/server/trunk/src/org/red5/server/net/rtmp/Channel.java (original)
+++ java/server/trunk/src/org/red5/server/net/rtmp/Channel.java Fri Oct 10
08:17:24 2008
@@ -94,8 +94,7 @@
public void write(IRTMPEvent event) {
final IClientStream stream = connection.getStreamByChannelId(id);
if (id > 3 && stream == null) {
- log.info("Stream doesn't exist any longer, discarding message "
- + event);
+ log.info("Stream doesn't exist any longer, discarding message {}",
event);
return;
}
Modified: java/server/trunk/src/org/red5/server/net/rtmp/RTMPHandler.java
==============================================================================
--- java/server/trunk/src/org/red5/server/net/rtmp/RTMPHandler.java
(original)
+++ java/server/trunk/src/org/red5/server/net/rtmp/RTMPHandler.java Fri Oct
10 08:17:24 2008
@@ -312,8 +312,8 @@
pc.setResult(result);
}
// Measure initial roundtrip time after connecting
- conn.ping(new Ping(Ping.STREAM_CLEAR, 0, -1));
- conn.startRoundTripMeasurement();
+ //conn.ping(new Ping(Ping.STREAM_CLEAR, 0, -1));
+ //conn.startRoundTripMeasurement();
} else {
log.debug("Connect failed");
call.setStatus(Call.STATUS_ACCESS_DENIED);
Modified: java/server/trunk/src/org/red5/server/net/rtmp/RTMPHandshake.java
==============================================================================
--- java/server/trunk/src/org/red5/server/net/rtmp/RTMPHandshake.java
(original)
+++ java/server/trunk/src/org/red5/server/net/rtmp/RTMPHandshake.java Fri
Oct 10 08:17:24 2008
@@ -387,16 +387,26 @@
public ByteBuffer generateResponse(ByteBuffer input) {
ByteBuffer output = ByteBuffer
.allocate((Constants.HANDSHAKE_SIZE * 2) + 1);
+ input.mark();
+ input.position(input.position() + 4);
+ byte input4 = input.get();
+ input.reset();
+ input.mark();
byte[] newKeyPart = getNewKeyPart(input);
+ input.reset();
byte[] newKey = calculateHMAC_SHA256(newKeyPart, SECRET_KEY);
byte[] randBytes = new byte[Constants.HANDSHAKE_SIZE - 32];
random.nextBytes(randBytes);
byte[] hashedBytes = calculateHMAC_SHA256(randBytes, newKey);
byte[] byteChunk = new byte[Constants.HANDSHAKE_SIZE];
+ if (input4 != 0) {
System.arraycopy(randBytes, 0, byteChunk, 0, randBytes.length);
System.arraycopy(hashedBytes, 0, byteChunk, randBytes.length,
hashedBytes.length);
+ } else {
+ input.get(byteChunk);
+ }
output.put((byte) 0x03);
output.put(HANDSHAKE_SERVER_BYTES);
output.put(byteChunk);
@@ -424,7 +434,7 @@
byte[] inputArray = new byte[input.remaining()];
input.get(inputArray, 0, input.remaining());
- int index = Math.abs((inputArray[8] + inputArray[9] + inputArray[10] +
inputArray[11])) % 728 + 12;
+ int index = ((inputArray[8]&0x0ff) + (inputArray[9]&0x0ff) +
(inputArray[10]&0x0ff) + (inputArray[11]&0x0ff)) % 728 + 12;
System.arraycopy(inputArray, index, part, 0, 32);
return part;
}
Modified:
java/server/trunk/src/org/red5/server/net/rtmp/RTMPMinaConnection.java
==============================================================================
--- java/server/trunk/src/org/red5/server/net/rtmp/RTMPMinaConnection.java
(original)
+++ java/server/trunk/src/org/red5/server/net/rtmp/RTMPMinaConnection.java
Fri Oct 10 08:17:24 2008
@@ -116,27 +116,27 @@
/** {@inheritDoc} */
@Override
public long getPendingMessages() {
- if (ioSession == null)
+ if (ioSession == null) {
return 0;
-
+ }
return ioSession.getScheduledWriteRequests();
}
/** {@inheritDoc} */
@Override
public long getReadBytes() {
- if (ioSession == null)
+ if (ioSession == null) {
return 0;
-
+ }
return ioSession.getReadBytes();
}
/** {@inheritDoc} */
@Override
public long getWrittenBytes() {
- if (ioSession == null)
+ if (ioSession == null) {
return 0;
-
+ }
return ioSession.getWrittenBytes();
}
Modified:
java/server/trunk/src/org/red5/server/net/rtmp/codec/RTMPProtocolDecoder.java
==============================================================================
---
java/server/trunk/src/org/red5/server/net/rtmp/codec/RTMPProtocolDecoder.java
(original)
+++
java/server/trunk/src/org/red5/server/net/rtmp/codec/RTMPProtocolDecoder.java
Fri Oct 10 08:17:24 2008
@@ -203,11 +203,12 @@
switch (rtmp.getState()) {
case RTMP.STATE_CONNECTED:
return decodePacket(rtmp, in);
+ case RTMP.STATE_ERROR:
+ // attempt to correct error
+ return null;
case RTMP.STATE_CONNECT:
case RTMP.STATE_HANDSHAKE:
return decodeHandshake(rtmp, in);
- case RTMP.STATE_ERROR:
- // attempt to correct error?
default:
return null;
}
Modified:
java/server/trunk/src/org/red5/server/net/rtmp/codec/RTMPProtocolEncoder.java
==============================================================================
---
java/server/trunk/src/org/red5/server/net/rtmp/codec/RTMPProtocolEncoder.java
(original)
+++
java/server/trunk/src/org/red5/server/net/rtmp/codec/RTMPProtocolEncoder.java
Fri Oct 10 08:17:24 2008
@@ -204,13 +204,13 @@
private int calculateHeaderSize(Header header, Header lastHeader) {
final byte headerType = getHeaderType(header, lastHeader);
int channelIdAdd;
- if (header.getChannelId() > 320)
+ if (header.getChannelId() > 320) {
channelIdAdd = 2;
- else if (header.getChannelId() > 63)
+ } else if (header.getChannelId() > 63) {
channelIdAdd = 1;
- else
+ } else {
channelIdAdd = 0;
-
+ }
return RTMPUtils.getHeaderLength(headerType) + channelIdAdd;
}
@@ -403,8 +403,7 @@
case CLIENT_UPDATE_DATA:
if (event.getKey() == null) {
// Update multiple attributes in one request
- Map initialData = (Map) event.getValue();
-
+ Map<?, ?> initialData = (Map<?, ?>)
event.getValue();
for (Object o : initialData.keySet()) {
out.put(type);
@@ -440,7 +439,7 @@
// Serialize name of the handler to call...
serializer.serialize(output, event.getKey());
// ...and the arguments
- for (Object arg : (List) event.getValue()) {
+ for (Object arg : (List<?>) event.getValue()) {
serializer.serialize(output, arg);
}
len = out.position() - mark - 4;
Modified: java/server/trunk/src/org/red5/server/net/rtmp/event/FLVData.java
==============================================================================
--- java/server/trunk/src/org/red5/server/net/rtmp/event/FLVData.java
(original)
+++ java/server/trunk/src/org/red5/server/net/rtmp/event/FLVData.java Fri
Oct 10 08:17:24 2008
@@ -116,6 +116,10 @@
*/
public static final int AUDIO_NELLYMOOSER = 6;
/**
+ * Speex encoded data
+ */
+ public static final int AUDIO_SPEEX = 11;
+ /**
* Sound size when 8 khz quality marker
*/
public static final int SOUND_SIZE_8_BIT = 0;
More information about the Red5commits
mailing list