[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