[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