[Red5commits] [red5 commit] r3247 - in java/server: branches/aclarke_autotest/src/org/red5/compatibility/flex/messaging/messa...

codesite-noreply at google.com codesite-noreply at google.com
Thu Oct 16 23:41:29 PDT 2008


Author: mondain
Date: Thu Oct 16 23:40:06 2008
New Revision: 3247

Modified:
     
java/server/branches/aclarke_autotest/src/org/red5/compatibility/flex/messaging/messages/AbstractMessage.java
     
java/server/branches/aclarke_autotest/src/org/red5/compatibility/flex/messaging/messages/AsyncMessage.java
     
java/server/branches/aclarke_autotest/src/org/red5/server/net/rtmp/Channel.java
     
java/server/branches/aclarke_autotest/src/org/red5/server/net/rtmp/RTMPHandshake.java
     
java/server/branches/aclarke_autotest/src/org/red5/server/net/rtmp/RTMPMinaConnection.java
     
java/server/branches/aclarke_autotest/src/org/red5/server/net/rtmp/codec/RTMPProtocolDecoder.java
     
java/server/branches/aclarke_autotest/src/org/red5/server/net/rtmp/codec/RTMPProtocolEncoder.java
     
java/server/branches/aclarke_autotest/src/org/red5/server/net/rtmp/event/FLVData.java
    java/server/trunk/src/org/red5/io/amf/Input.java
    java/server/trunk/src/org/red5/io/amf/Output.java
    java/server/trunk/src/org/red5/io/amf3/Output.java
    java/server/trunk/src/org/red5/io/object/BaseInput.java
    java/server/trunk/src/org/red5/server/net/remoting/RemotingClient.java
     
java/server/trunk/src/org/red5/server/net/remoting/codec/RemotingProtocolDecoder.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/service/ServiceUtils.java
    java/server/trunk/test/org/red5/io/utils/XMLUtilsTest.java
    java/server/trunk/test/org/red5/server/io/AMF3IOTest.java
    java/server/trunk/test/org/red5/server/io/AMFIOTest.java
    java/server/trunk/test/org/red5/server/io/AbstractIOTest.java
    java/server/trunk/test/org/red5/server/script/ScriptEngineTest.java

Log:
Fixed APPSERVER-296. Updated trunk with fixes from Arts branch.

Modified:  
java/server/branches/aclarke_autotest/src/org/red5/compatibility/flex/messaging/messages/AbstractMessage.java
==============================================================================
---  
java/server/branches/aclarke_autotest/src/org/red5/compatibility/flex/messaging/messages/AbstractMessage.java	 
(original)
+++  
java/server/branches/aclarke_autotest/src/org/red5/compatibility/flex/messaging/messages/AbstractMessage.java	 
Thu Oct 16 23:40:06 2008
@@ -64,13 +64,20 @@
  	 * @param result <code>StringBuilder</code> to add properties to
  	 */
  	protected void addParameters(StringBuilder result) {
-		result.append("ts="+timestamp+",");
-		result.append("headers="+headers+",");
-		result.append("body="+body+",");
-		result.append("messageId="+messageId+",");
-		result.append("timeToLive="+timeToLive+",");
-		result.append("clientId="+clientId+",");
-		result.append("destination="+destination);
+		result.append("ts=");
+		result.append(timestamp);
+		result.append(",headers=");
+		result.append(headers);
+		result.append(",body=");
+		result.append(body);
+		result.append(",messageId=");
+		result.append(messageId);
+		result.append(",timeToLive=");
+		result.append(timeToLive);
+		result.append(",clientId=");
+		result.append(clientId);
+		result.append(",destination=");
+		result.append(destination);
  	}
  	
  	/**

Modified:  
java/server/branches/aclarke_autotest/src/org/red5/compatibility/flex/messaging/messages/AsyncMessage.java
==============================================================================
---  
java/server/branches/aclarke_autotest/src/org/red5/compatibility/flex/messaging/messages/AsyncMessage.java	 
(original)
+++  
java/server/branches/aclarke_autotest/src/org/red5/compatibility/flex/messaging/messages/AsyncMessage.java	 
Thu Oct 16 23:40:06 2008
@@ -35,7 +35,8 @@
  	/** {@inheritDoc} */
  	protected void addParameters(StringBuilder result) {
  		super.addParameters(result);
-		result.append(",correlationId="+correlationId);
+		result.append(",correlationId=");
+		result.append(correlationId);
  	}

  }

Modified:  
java/server/branches/aclarke_autotest/src/org/red5/server/net/rtmp/Channel.java
==============================================================================
---  
java/server/branches/aclarke_autotest/src/org/red5/server/net/rtmp/Channel.java	 
(original)
+++  
java/server/branches/aclarke_autotest/src/org/red5/server/net/rtmp/Channel.java	 
Thu Oct 16 23:40:06 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/branches/aclarke_autotest/src/org/red5/server/net/rtmp/RTMPHandshake.java
==============================================================================
---  
java/server/branches/aclarke_autotest/src/org/red5/server/net/rtmp/RTMPHandshake.java	 
(original)
+++  
java/server/branches/aclarke_autotest/src/org/red5/server/net/rtmp/RTMPHandshake.java	 
Thu Oct 16 23:40:06 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];

-		System.arraycopy(randBytes, 0, byteChunk, 0, randBytes.length);
-		System.arraycopy(hashedBytes, 0, byteChunk, randBytes.length,
+		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/branches/aclarke_autotest/src/org/red5/server/net/rtmp/RTMPMinaConnection.java
==============================================================================
---  
java/server/branches/aclarke_autotest/src/org/red5/server/net/rtmp/RTMPMinaConnection.java	 
(original)
+++  
java/server/branches/aclarke_autotest/src/org/red5/server/net/rtmp/RTMPMinaConnection.java	 
Thu Oct 16 23:40:06 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/branches/aclarke_autotest/src/org/red5/server/net/rtmp/codec/RTMPProtocolDecoder.java
==============================================================================
---  
java/server/branches/aclarke_autotest/src/org/red5/server/net/rtmp/codec/RTMPProtocolDecoder.java	 
(original)
+++  
java/server/branches/aclarke_autotest/src/org/red5/server/net/rtmp/codec/RTMPProtocolDecoder.java	 
Thu Oct 16 23:40:06 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/branches/aclarke_autotest/src/org/red5/server/net/rtmp/codec/RTMPProtocolEncoder.java
==============================================================================
---  
java/server/branches/aclarke_autotest/src/org/red5/server/net/rtmp/codec/RTMPProtocolEncoder.java	 
(original)
+++  
java/server/branches/aclarke_autotest/src/org/red5/server/net/rtmp/codec/RTMPProtocolEncoder.java	 
Thu Oct 16 23:40:06 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/branches/aclarke_autotest/src/org/red5/server/net/rtmp/event/FLVData.java
==============================================================================
---  
java/server/branches/aclarke_autotest/src/org/red5/server/net/rtmp/event/FLVData.java	 
(original)
+++  
java/server/branches/aclarke_autotest/src/org/red5/server/net/rtmp/event/FLVData.java	 
Thu Oct 16 23:40:06 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;

Modified: java/server/trunk/src/org/red5/io/amf/Input.java
==============================================================================
--- java/server/trunk/src/org/red5/io/amf/Input.java	(original)
+++ java/server/trunk/src/org/red5/io/amf/Input.java	Thu Oct 16 23:40:06  
2008
@@ -249,10 +249,10 @@
  		log.debug("Limit: {}", limit);
  		final java.nio.ByteBuffer strBuf = buf.buf();
  		int pos = strBuf.position();
-		log.info("Sting buf - position: {} limit: {}", pos, (pos + len));
+		log.debug("String buf - position: {} limit: {}", pos, (pos + len));
  		strBuf.limit(pos + len);
  		final String string = AMF.CHARSET.decode(strBuf).toString();
-		log.info("Sting: {}", string);
+		log.debug("String: {}", string);
  		buf.limit(limit); // Reset the limit
  		return string;
  	}
@@ -342,6 +342,9 @@
  		log.debug("Read start mixed array: {}", maxNumber);
  		Object result;
  		final Map<Object, Object> mixedResult = new LinkedHashMap<Object,  
Object>(maxNumber);
+		// we must store the reference before we deserialize any items in it to  
ensure
+		// that reference IDs are correct
+		int reference = storeReference(mixedResult);
  		while (hasMoreProperties()) {
  			String key = getString(buf);
  			log.debug("key: {}", key);
@@ -368,7 +371,8 @@
  			}
  			result = mixedResult;
  		}
-		storeReference(result);
+		// Replace the original reference with the final result
+		storeReference(reference, result);
  		skipEndObject();
  		return result;
  	}
@@ -383,7 +387,7 @@
  	 * @return Object          New object instance (for given class)
  	 */
  	protected Object newInstance(String className) {
-		log.info("Loading class: {}", className);
+		log.debug("Loading class: {}", className);
  		Object instance = null;
  		try {
  			Class<?> clazz = Thread.currentThread().getContextClassLoader()
@@ -577,28 +581,15 @@
  	 * @return Object       Read reference to object
  	 */
  	public Object readReference(Type target) {
-		if (referenceMode == ReferenceMode.MODE_RTMP) {
-			return getReference(buf.getUnsignedShort() - 1);
-		} else {
-			return getReference(buf.getUnsignedShort());
-		}
-	}
-
-	/**
-	 * Resets map and set mode to handle references
-	 *
-	 * @param mode mode to handle references
-	 */
-	public void reset(ReferenceMode mode) {
-		this.clearReferences();
-		referenceMode = mode;
+		return getReference(buf.getUnsignedShort());
  	}

  	/**
  	 * Resets map
+	 *
  	 */
  	public void reset() {
-		reset(ReferenceMode.MODE_RTMP);
+		this.clearReferences();
  	}

      protected Type getPropertyType(Object instance, String propertyName) {

Modified: java/server/trunk/src/org/red5/io/amf/Output.java
==============================================================================
--- java/server/trunk/src/org/red5/io/amf/Output.java	(original)
+++ java/server/trunk/src/org/red5/io/amf/Output.java	Thu Oct 16 23:40:06  
2008
@@ -269,7 +269,7 @@
          // Create new map out of bean properties
          BeanMap beanMap = new BeanMap(object);
          // Set of bean attributes
-        Set set = beanMap.keySet();
+        Set<Map.Entry<?, ?>> set = beanMap.entrySet();
  		if ((set.size() == 0) || (set.size() == 1 &&  
beanMap.containsKey("class"))) {
  			// BeanMap is empty or can only access "class" attribute, skip it
  			writeArbitraryObject(object, serializer);
@@ -294,8 +294,8 @@
          }

          // Iterate thru entries and write out property names with  
separators
-		for (Object key : set) {
-            String fieldName = key.toString();
+		for (Map.Entry<?, ?> entry: set) {
+            String fieldName = entry.getKey().toString();
              log.debug("Field name: {} class: {}", fieldName, objectClass);

              Field field = getField(objectClass, fieldName);
@@ -306,7 +306,7 @@
              }

              putString(buf, fieldName);
-			serializer.serialize(this, field, beanMap.get(key));
+			serializer.serialize(this, field, entry.getValue());
  		}
          // Write out end of object mark
  		buf.put((byte) 0x00);

Modified: java/server/trunk/src/org/red5/io/amf3/Output.java
==============================================================================
--- java/server/trunk/src/org/red5/io/amf3/Output.java	(original)
+++ java/server/trunk/src/org/red5/io/amf3/Output.java	Thu Oct 16 23:40:06  
2008
@@ -459,7 +459,7 @@
          // Create new map out of bean properties
          BeanMap beanMap = new BeanMap(object);
          // Set of bean attributes
-        Set set = beanMap.keySet();
+        Set<Map.Entry<?, ?>> set = beanMap.entrySet();
  		if ((set.size() == 0) || (set.size() == 1 &&  
beanMap.containsKey("class"))) {
  			// BeanMap is empty or can only access "class" attribute, skip it
  			writeArbitraryObject(object, serializer);
@@ -477,8 +477,8 @@

      	// Store key/value pairs
      	amf3_mode += 1;
-    	for (Object key: set) {
-			String fieldName = key.toString();
+    	for (Map.Entry<?, ?> entry: set) {
+			String fieldName = entry.getKey().toString();
              log.debug("Field name: {} class: {}", fieldName, objectClass);

  			Field field = getField(objectClass, fieldName);
@@ -489,7 +489,7 @@
              }

  			putString(fieldName);
-			serializer.serialize(this, field, beanMap.get(key));
+			serializer.serialize(this, field, entry.getValue());
  		}
      	amf3_mode -= 1;


Modified: java/server/trunk/src/org/red5/io/object/BaseInput.java
==============================================================================
--- java/server/trunk/src/org/red5/io/object/BaseInput.java	(original)
+++ java/server/trunk/src/org/red5/io/object/BaseInput.java	Thu Oct 16  
23:40:06 2008
@@ -32,14 +32,6 @@
  public class BaseInput {
  	
  	/**
-	 * Mode how references should be handled.
-	 */
-	public enum ReferenceMode {
-		MODE_RTMP,
-		MODE_REMOTING,
-	};
-	
-    /**
       * References map
       */
  	protected Map<Integer, Object> refMap = new HashMap<Integer, Object>();
@@ -49,11 +41,6 @@
       */
      protected int refId;

-    /**
-     * Mode how to handle references.
-     */
-    protected ReferenceMode referenceMode = ReferenceMode.MODE_RTMP;
-
  	/**
  	 * Store an object into a map
  	 * @param obj  Object to store

Modified:  
java/server/trunk/src/org/red5/server/net/remoting/RemotingClient.java
==============================================================================
--- java/server/trunk/src/org/red5/server/net/remoting/RemotingClient.java	 
(original)
+++ java/server/trunk/src/org/red5/server/net/remoting/RemotingClient.java	 
Thu Oct 16 23:40:06 2008
@@ -237,8 +237,8 @@
  		Deserializer deserializer = new Deserializer();
  		Input input = new Input(in);
  		for (int i = 0; i < count; i++) {
-			//String name = Input.getString(in);
-			String name = deserializer.deserialize(input, String.class);
+			String name = input.getString(in);
+			//String name = deserializer.deserialize(input, String.class);
  			log.debug("Name: {}", name);
  			boolean required = (in.get() == 0x01);
  			log.debug("Required: {}", required);
@@ -261,9 +261,9 @@
  					@SuppressWarnings("unchecked")
  					Map<String, Object> valueMap = (Map<String, Object>) value;
  					RemotingHeader header = new RemotingHeader(
-							(String) valueMap.get("name"), (Boolean) valueMap
-									.get("mustUnderstand"), valueMap
-									.get("data"));
+							(String) valueMap.get("name"),
+							(Boolean) valueMap.get("mustUnderstand"),
+							valueMap.get("data"));
  					headers.put(header.name, header);
  				} else {
  					log.error("Expected Map but received {}", value);
@@ -360,13 +360,16 @@
  	 * @return the result of the method call
  	 */
  	public Object invokeMethod(String method, Object[] params) {
+		log.debug("invokeMethod url: {}", (url + appendToUrl));
  		PostMethod post = new PostMethod(this.url + appendToUrl);
  		ByteBuffer resultBuffer = null;
  		ByteBuffer data = encodeInvoke(method, params);
  		post.setRequestEntity(new InputStreamRequestEntity(
  				data.asInputStream(), data.limit(), CONTENT_TYPE));
  		try {
+			log.debug("Client: {}", client);
  			int resultCode = client.executeMethod(post);
+			log.debug("Result code: {}", resultCode);
  			if (resultCode / 100 != 2) {
  				throw new RuntimeException(
  						"Didn't receive success from remoting server.");
@@ -426,7 +429,7 @@
  			worker.setParamTypes(paramTypes);
  			threadPool.execute(worker);
  		} catch (Exception err) {
-			log.warn("Exception invoking method: {}", method);
+			log.warn("Exception invoking method: {}", method, err);
  		}
  	}


Modified:  
java/server/trunk/src/org/red5/server/net/remoting/codec/RemotingProtocolDecoder.java
==============================================================================
---  
java/server/trunk/src/org/red5/server/net/remoting/codec/RemotingProtocolDecoder.java	 
(original)
+++  
java/server/trunk/src/org/red5/server/net/remoting/codec/RemotingProtocolDecoder.java	 
Thu Oct 16 23:40:06 2008
@@ -31,7 +31,6 @@
  import org.red5.io.amf.AMF;
  import org.red5.io.object.Deserializer;
  import org.red5.io.object.Input;
-import org.red5.io.object.BaseInput.ReferenceMode;
  import org.red5.server.net.protocol.ProtocolState;
  import org.red5.server.net.protocol.SimpleProtocolDecoder;
  import org.red5.server.net.remoting.FlexMessagingService;
@@ -107,8 +106,8 @@
  		int count = in.getUnsignedShort();
  		if (log.isDebugEnabled()) {
  			log.debug("Skip headers");
-			log.debug("Version: " + version);
-			log.debug("Count: " + count);
+			log.debug("Version: {}", version);
+			log.debug("Count: {}", count);
  		}
  		if (count == 0) {
  			// No headers present
@@ -151,7 +150,7 @@
  		org.red5.io.amf.Input input;
  		int count = in.getUnsignedShort();
  		if (log.isDebugEnabled()) {
-			log.debug("Calls: " + count);
+			log.debug("Calls: {}", count);
  		}
  		int limit = in.limit();

@@ -162,37 +161,51 @@

  			String serviceString = org.red5.io.amf.Input.getString(in);
  			String clientCallback = org.red5.io.amf.Input.getString(in);
-			if (log.isDebugEnabled()) {
-				log.debug("callback: " + clientCallback);
-			}
-			@SuppressWarnings("unused") int length = in.getInt();
+			log.debug("callback: {}", clientCallback);
+
+            Object[] args = null;
+			boolean isAMF3 = false;
+			
+			@SuppressWarnings("unused")
+			int length = in.getInt();
  			// Set the limit and deserialize
  			// NOTE: disabled because the FP sends wrong values here
  			/*
  			 * if (length != -1) in.limit(in.position()+length);
  			 */
  			byte type = in.get();
-			if (type != AMF.TYPE_ARRAY) {
+			if (type == AMF.TYPE_ARRAY) {
+    			int elements = in.getInt();
+    			List<Object> values = new ArrayList<Object>();
+    			for (int j=0; j<elements; j++) {
+    				byte amf3Check = in.get();
+    				in.position(in.position()-1);
+    				isAMF3 = (amf3Check == AMF.TYPE_AMF3_OBJECT);
+    				if (isAMF3) {
+    					input = new org.red5.io.amf3.Input(in);
+    				} else {
+    					input = new org.red5.io.amf.Input(in);
+    				}
+    				// Prepare remoting mode
+    				input.reset();
+    				
+    				values.add(deserializer.deserialize(input, Object.class));
+    			}
+
+    			args = values.toArray(new Object[values.size()]);
+    			if (log.isDebugEnabled()) {
+    				for (Object element : args) {
+    					log.debug("> " + element);
+    				}
+    			}
+
+            } else if (type == AMF.TYPE_NULL) {
+                log.debug("Got null amf type");
+
+            } else if (type != AMF.TYPE_ARRAY) {
  				throw new RuntimeException("AMF0 array type expected but found " +  
type);
  			}
-			int elements = in.getInt();
-			boolean isAMF3 = false;
-			List<Object> values = new ArrayList<Object>();
-			for (int j=0; j<elements; j++) {
-				byte amf3Check = in.get();
-				in.position(in.position()-1);
-				isAMF3 = (amf3Check == AMF.TYPE_AMF3_OBJECT);
-				if (isAMF3) {
-					input = new org.red5.io.amf3.Input(in);
-				} else {
-					input = new org.red5.io.amf.Input(in);
-				}
-				// Prepare remoting mode
-				input.reset(ReferenceMode.MODE_REMOTING);
-				
-				values.add(deserializer.deserialize(input, Object.class));
-			}
-
+		
  			String serviceName;
  			String serviceMethod;
  			int dotPos = serviceString.lastIndexOf('.');
@@ -213,16 +226,7 @@
  				serviceMethod = "handleRequest";
  				isMessaging = true;
  			}
-			
-			if (log.isDebugEnabled()) {
-				log.debug("Service: " + serviceName + " Method: " + serviceMethod);
-			}
-			Object[] args = values.toArray(new Object[values.size()]);
-			if (log.isDebugEnabled()) {
-				for (Object element : args) {
-					log.debug("> " + element);
-				}
-			}
+			log.debug("Service: {} Method: {}", serviceName, serviceMethod);

  			// Add the call to the list
  			calls.add(new RemotingCall(serviceName, serviceMethod, args,  
clientCallback, isAMF3, isMessaging));

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	Thu Oct  
16 23:40:06 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	Thu  
Oct 16 23:40:06 2008
@@ -401,8 +401,8 @@
  		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,
+			System.arraycopy(randBytes, 0, byteChunk, 0, randBytes.length);
+			System.arraycopy(hashedBytes, 0, byteChunk, randBytes.length,
  				hashedBytes.length);
  		} else {
  			input.get(byteChunk);

Modified: java/server/trunk/src/org/red5/server/service/ServiceUtils.java
==============================================================================
--- java/server/trunk/src/org/red5/server/service/ServiceUtils.java	 
(original)
+++ java/server/trunk/src/org/red5/server/service/ServiceUtils.java	Thu Oct  
16 23:40:06 2008
@@ -80,9 +80,10 @@
  		log.debug("Found {} methods", methods.size());
  		if (methods.isEmpty()) {
  			return new Object[] { null, null };
+		} else if (methods.size() == 1 && args == null) {
+			return new Object[] {methods.get(0), args};			
  		} else if (methods.size() > 1) {
-			log
-					.debug("Multiple methods found with same name and parameter count.");
+			log.debug("Multiple methods found with same name and parameter count.");
  			log.debug("Parameter conversion will be attempted in order.");
  		}


Modified: java/server/trunk/test/org/red5/io/utils/XMLUtilsTest.java
==============================================================================
--- java/server/trunk/test/org/red5/io/utils/XMLUtilsTest.java	(original)
+++ java/server/trunk/test/org/red5/io/utils/XMLUtilsTest.java	Thu Oct 16  
23:40:06 2008
@@ -24,6 +24,7 @@
  import java.io.IOException;

  import org.junit.Test;
+import org.junit.Ignore;

  public class XMLUtilsTest {
  	
@@ -38,16 +39,19 @@
  	}

  	@Test
+	@Ignore
  	public void testDocToString() {
  		fail("Not yet implemented");
  	}

  	@Test
+	@Ignore
  	public void testDocToString1() {
  		fail("Not yet implemented");
  	}

  	@Test
+	@Ignore
  	public void testDocToString2() {
  		fail("Not yet implemented");
  	}

Modified: java/server/trunk/test/org/red5/server/io/AMF3IOTest.java
==============================================================================
--- java/server/trunk/test/org/red5/server/io/AMF3IOTest.java	(original)
+++ java/server/trunk/test/org/red5/server/io/AMF3IOTest.java	Thu Oct 16  
23:40:06 2008
@@ -22,7 +22,6 @@
  import org.apache.mina.common.ByteBuffer;
  import org.red5.io.amf3.Input;
  import org.red5.io.amf3.Output;
-import org.red5.io.object.BaseInput.ReferenceMode;
  import org.red5.io.utils.HexDump;

  /*

Modified: java/server/trunk/test/org/red5/server/io/AMFIOTest.java
==============================================================================
--- java/server/trunk/test/org/red5/server/io/AMFIOTest.java	(original)
+++ java/server/trunk/test/org/red5/server/io/AMFIOTest.java	Thu Oct 16  
23:40:06 2008
@@ -23,7 +23,6 @@
  import org.apache.mina.common.ByteBuffer;
  import org.red5.io.amf.Input;
  import org.red5.io.amf.Output;
-import org.red5.io.object.BaseInput.ReferenceMode;
  import org.red5.io.utils.HexDump;

  /*

Modified: java/server/trunk/test/org/red5/server/io/AbstractIOTest.java
==============================================================================
--- java/server/trunk/test/org/red5/server/io/AbstractIOTest.java	(original)
+++ java/server/trunk/test/org/red5/server/io/AbstractIOTest.java	Thu Oct  
16 23:40:06 2008
@@ -96,7 +96,7 @@
  		resetOutput();
  	}

-	public void testCirularReference() {
+	public void testCircularReference() {
  		CircularRefBean beanIn = new CircularRefBean();
  		beanIn.setRefToSelf(beanIn);
  		serializer.serialize(out, beanIn);

Modified:  
java/server/trunk/test/org/red5/server/script/ScriptEngineTest.java
==============================================================================
--- java/server/trunk/test/org/red5/server/script/ScriptEngineTest.java	 
(original)
+++ java/server/trunk/test/org/red5/server/script/ScriptEngineTest.java	Thu  
Oct 16 23:40:06 2008
@@ -44,11 +44,28 @@
  	private static final Logger log =  
LoggerFactory.getLogger(ScriptEngineTest.class);

  	// ScriptEngine manager
-	private static ScriptEngineManager mgr = new ScriptEngineManager();
+	private static boolean java15;
+	private static ScriptEngineManager mgr;

+	public ScriptEngineTest()
+	{
+		String javaVersion = System.getProperty("java.version");
+		String javaMajorRev = javaVersion.substring(0,3);
+		if (javaVersion != null && javaMajorRev.compareTo("1.5") == 0)
+		{
+			//should disable tests
+			java15 = true;
+		} else {
+			java15 = false;
+			mgr = new ScriptEngineManager();
+		}
+	}
  	// Javascript
  	@Test
  	public void testJavascriptHelloWorld() {
+		if (java15)
+			return;
+		
  		ScriptEngine jsEngine = null;
  		for (ScriptEngineFactory factory : mgr.getEngineFactories()) {
  			if (factory.getEngineName().toLowerCase().matches(
@@ -60,7 +77,7 @@
  			log.error("Javascript is not supported in this build");
  		}
  		try {
-			jsEngine.eval("print('Javascript - Hello, world!')");
+			jsEngine.eval("print('Javascript - Hello, world!\\n')");
  		} catch (Throwable ex) {
  			System.err.println("Get by name failed for: javascript");
  		}
@@ -69,6 +86,8 @@
  	// Ruby
  	@Test
  	public void testRubyHelloWorld() {
+		if (java15)
+			return;
  		ScriptEngine rbEngine = mgr.getEngineByName("ruby");
  		try {
  			rbEngine.eval("puts 'Ruby - Hello, world!'");
@@ -82,6 +101,8 @@
  	@Test
  	@Ignore // Python support seems to not be in tree anymore; aclarke  
2008-10-01
  	public void testPythonHelloWorld() {
+		if (java15)
+			return;
  		ScriptEngine pyEngine = mgr.getEngineByName("python");
  		try {
  			pyEngine.eval("print \"Python - Hello, world!\"");
@@ -94,6 +115,8 @@
  	// Groovy
  	@Test
  	public void testGroovyHelloWorld() {
+		if (java15)
+			return;
  		ScriptEngine gvyEngine = mgr.getEngineByName("groovy");
  		try {
  			gvyEngine.eval("println  \"Groovy - Hello, world!\"");
@@ -261,6 +284,8 @@

  	@Test
  	public void testEngines() {
+		if (java15)
+			return;
  		Map<String, ScriptEngineFactory> engineFactories = new HashMap<String,  
ScriptEngineFactory>(
  				7);
  		//List<ScriptEngineFactory> factories = mgr.getEngineFactories(); //jdk6



More information about the Red5commits mailing list