[Red5commits] [1603] RTMP packages documentation patch
mklishin
luke at codegent.com
Wed Jan 24 11:04:15 EST 2007
RTMP packages documentation patch
Timestamp: 12/26/06 10:21:22 EST (1 month ago)
Change: 1603
Author: mklishin
Files (see diff or trac for details):
java/server/trunk/src/org/red5/server/net/rtmp/BaseRTMPHandler.java
java/server/trunk/src/org/red5/server/net/rtmp/Channel.java
java/server/trunk/src/org/red5/server/net/rtmp/DeferredResult.java
java/server/trunk/src/org/red5/server/net/rtmp/IRTMPHandler.java
java/server/trunk/src/org/red5/server/net/rtmp/RTMPHandler.java
java/server/trunk/src/org/red5/server/net/rtmp/RTMPMinaConnection.java
java/server/trunk/src/org/red5/server/net/rtmp/RTMPMinaIoHandler.java
java/server/trunk/src/org/red5/server/net/rtmp/RTMPUtils.java
java/server/trunk/src/org/red5/server/net/rtmp/event/Ping.java
Trac: http://mirror1.cvsdude.com/trac/osflash/red5/changeset/1603
Index: /java/server/trunk/src/org/red5/server/net/rtmp/DeferredResult.java
===================================================================
--- /java/server/trunk/src/org/red5/server/net/rtmp/DeferredResult.java (revision 1597)
+++ /java/server/trunk/src/org/red5/server/net/rtmp/DeferredResult.java (revision 1603)
@@ -20,10 +20,10 @@
*/
-import java.lang.ref.WeakReference;
-
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.red5.server.api.service.IPendingServiceCall;
import org.red5.server.net.rtmp.event.Invoke;
+
+import java.lang.ref.WeakReference;
/**
@@ -34,5 +34,7 @@
*/
public class DeferredResult {
-
+ /**
+ * Logger
+ */
protected static Log log = LogFactory.getLog(DeferredResult.class.getName());
Index: /java/server/trunk/src/org/red5/server/net/rtmp/RTMPHandler.java
===================================================================
--- /java/server/trunk/src/org/red5/server/net/rtmp/RTMPHandler.java (revision 1597)
+++ /java/server/trunk/src/org/red5/server/net/rtmp/RTMPHandler.java (revision 1603)
@@ -20,16 +20,8 @@
*/
-import static org.red5.server.api.ScopeUtils.getScopeService;
-
-import java.util.HashMap;
-import java.util.Map;
-
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.red5.server.api.IContext;
-import org.red5.server.api.IGlobalScope;
-import org.red5.server.api.IScope;
-import org.red5.server.api.IScopeHandler;
-import org.red5.server.api.IServer;
+import org.red5.server.api.*;
+import static org.red5.server.api.ScopeUtils.getScopeService;
import org.red5.server.api.service.IPendingServiceCall;
import org.red5.server.api.service.IServiceCall;
@@ -59,16 +51,28 @@
import org.red5.server.stream.StreamService;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * RTMP events handler
+ */
public class RTMPHandler extends BaseRTMPHandler {
-
+ /**
+ * Logger
+ */
protected static Log log = LogFactory.getLog(RTMPHandler.class.getName());
-
+ /**
+ * Status object service
+ */
protected StatusObjectService statusObjectService;
-
+ /**
+ * Red5 server instance
+ */
protected IServer server;
/**
- * Setter for property 'server'.
+ * Setter for server object.
*
- * @param server Value to set for property 'server'.
+ * @param server Red5 server instance
*/
public void setServer(IServer server) {
@@ -77,7 +81,7 @@
/**
- * Setter for property 'statusObjectService'.
+ * Setter for status object service.
*
- * @param statusObjectService Value to set for property 'statusObjectService'.
+ * @param statusObjectService Status object service.
*/
public void setStatusObjectService(StatusObjectService statusObjectService) {
@@ -114,5 +118,10 @@
}
- protected void invokeCall(RTMPConnection conn, IServiceCall call) {
+ /**
+ * Remoting call invocation handler
+ * @param conn RTMP connection
+ * @param call Service call
+ */
+ protected void invokeCall(RTMPConnection conn, IServiceCall call) {
final IScope scope = conn.getScope();
if (scope.hasHandler()) {
@@ -135,5 +144,11 @@
}
- private void invokeCall(RTMPConnection conn, IServiceCall call,
+ /**
+ * Remoting call invocation handler
+ * @param conn RTMP connection
+ * @param call Service call
+ * @param service Server-side service object
+ */
+ private void invokeCall(RTMPConnection conn, IServiceCall call,
Object service) {
final IScope scope = conn.getScope();
Index: /java/server/trunk/src/org/red5/server/net/rtmp/event/Ping.java
===================================================================
--- /java/server/trunk/src/org/red5/server/net/rtmp/event/Ping.java (revision 1597)
+++ /java/server/trunk/src/org/red5/server/net/rtmp/event/Ping.java (revision 1603)
@@ -21,5 +21,5 @@
/**
- * Ping even, actually combination of different events
+ * Ping event, actually combination of different events
*/
public class Ping extends BaseEvent {
Index: /java/server/trunk/src/org/red5/server/net/rtmp/RTMPUtils.java
===================================================================
--- /java/server/trunk/src/org/red5/server/net/rtmp/RTMPUtils.java (revision 1406)
+++ /java/server/trunk/src/org/red5/server/net/rtmp/RTMPUtils.java (revision 1603)
@@ -24,10 +24,14 @@
/**
- *
+ * RTMP utilities class
* @author The Red5 Project (red5 at osflash.org)
* @author Luke Hubbard, Codegent Ltd (luke at codegent.com)
*/
public class RTMPUtils implements Constants {
-
+ /**
+ *
+ * @param out
+ * @param value
+ */
public static void writeReverseIntOld(ByteBuffer out, int value) {
byte[] bytes = new byte[4];
@@ -43,4 +47,9 @@
}
+ /**
+ *
+ * @param out
+ * @param value
+ */
public static void writeReverseInt(ByteBuffer out, int value) {
byte[] bytes = new byte[4];
@@ -52,4 +61,9 @@
}
+ /**
+ *
+ * @param out
+ * @param value
+ */
public static void writeMediumInt(ByteBuffer out, int value) {
byte[] bytes = new byte[3];
@@ -60,4 +74,9 @@
}
+ /**
+ *
+ * @param in
+ * @return
+ */
public static int readUnsignedMediumInt(ByteBuffer in) {
byte[] bytes = new byte[3];
@@ -83,4 +102,9 @@
}
+ /**
+ *
+ * @param in
+ * @return
+ */
public static int readUnsignedMediumIntOld(ByteBuffer in) {
byte[] bytes = new byte[3];
@@ -93,4 +117,9 @@
}
+ /**
+ *
+ * @param in
+ * @return
+ */
public static int readMediumIntOld(ByteBuffer in) {
ByteBuffer buf = ByteBuffer.allocate(4);
@@ -105,4 +134,9 @@
}
+ /**
+ *
+ * @param in
+ * @return
+ */
public static int readMediumInt(ByteBuffer in) {
byte[] bytes = new byte[3];
@@ -128,4 +162,9 @@
}
+ /**
+ *
+ * @param in
+ * @return
+ */
public static int readReverseInt(ByteBuffer in) {
byte[] bytes = new byte[4];
@@ -139,4 +178,9 @@
}
+ /**
+ *
+ * @param in
+ * @return
+ */
public static int readReverseIntOld(ByteBuffer in) {
byte[] bytes = new byte[4];
@@ -150,13 +194,29 @@
}
+ /**
+ *
+ * @param headerSize
+ * @param channelId
+ * @return
+ */
public static byte encodeHeaderByte(byte headerSize, byte channelId) {
return (byte) ((headerSize << 6) + channelId);
}
+ /**
+ *
+ * @param header
+ * @return
+ */
public static byte decodeChannelId(byte header) {
return (byte) (header & 0x3f);
}
- public static byte decodeHeaderSize(byte header) {
+ /**
+ *
+ * @param header
+ * @return
+ */
+ public static byte decodeHeaderSize(byte header) {
int headerInt = (header >= 0) ? header : header + 256;
byte size = (byte) (headerInt >> 6);
@@ -164,5 +224,10 @@
}
- public static int getHeaderLength(byte headerSize) {
+ /**
+ *
+ * @param headerSize
+ * @return
+ */
+ public static int getHeaderLength(byte headerSize) {
switch (headerSize) {
case HEADER_NEW:
Index: /java/server/trunk/src/org/red5/server/net/rtmp/RTMPMinaConnection.java
===================================================================
--- /java/server/trunk/src/org/red5/server/net/rtmp/RTMPMinaConnection.java (revision 1597)
+++ /java/server/trunk/src/org/red5/server/net/rtmp/RTMPMinaConnection.java (revision 1603)
@@ -20,7 +20,4 @@
*/
-import java.net.InetSocketAddress;
-import java.net.SocketAddress;
-
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -29,10 +26,18 @@
import org.red5.server.net.rtmp.message.Packet;
+import java.net.InetSocketAddress;
+import java.net.SocketAddress;
+
public class RTMPMinaConnection extends RTMPConnection {
-
+ /**
+ * Logger
+ */
protected static Log log = LogFactory.getLog(RTMPMinaConnection.class
.getName());
- private IoSession ioSession;
+ /**
+ * MINA I/O session, connection between two endpoints
+ */
+ private IoSession ioSession;
/** Constructs a new RTMPMinaConnection. */
@@ -42,7 +47,7 @@
/**
- * Setter for property 'ioSession'.
+ * Setter for MINA I/O session (connection)
*
- * @param protocolSession Value to set for property 'ioSession'.
+ * @param protocolSession Protocol session
*/
void setIoSession(IoSession protocolSession) {
@@ -60,7 +65,7 @@
/**
- * Getter for property 'ioSession'.
+ * Return MINA I/O session
*
- * @return Value for property 'ioSession'.
+ * @return MINA O/I session, connection between two endpoints
*/
public IoSession getIoSession() {
Index: /java/server/trunk/src/org/red5/server/net/rtmp/Channel.java
===================================================================
--- /java/server/trunk/src/org/red5/server/net/rtmp/Channel.java (revision 1597)
+++ /java/server/trunk/src/org/red5/server/net/rtmp/Channel.java (revision 1603)
@@ -46,10 +46,10 @@
* RTMP connection used to transfer packets
*/
- private RTMPConnection connection = null;
+ private RTMPConnection connection;
/**
* Channel id
*/
- private byte id = 0;
+ private byte id;
//private Stream stream;
@@ -72,7 +72,7 @@
/**
- * Getter for property 'id'.
+ * Getter for id.
*
- * @return Value for property 'id'.
+ * @return Channel ID
*/
public byte getId() {
@@ -81,5 +81,5 @@
/**
- * Getter for RTMP connection.
+ * Getter for RTMP connection.
*
* @return RTMP connection
@@ -146,9 +146,8 @@
invoke.setCall(call);
} else {
- final Call call = new Call(null, "onStatus",
- new Object[] { status });
+ final Call call = new Call(null, "onStatus", new Object[] { status });
invoke = (Invoke) new Notify();
invoke.setInvokeId(1);
- ((Notify) invoke).setCall(call);
+ invoke.setCall(call);
}
// We send directly to the corresponding stream as for
Index: /java/server/trunk/src/org/red5/server/net/rtmp/IRTMPHandler.java
===================================================================
--- /java/server/trunk/src/org/red5/server/net/rtmp/IRTMPHandler.java (revision 1530)
+++ /java/server/trunk/src/org/red5/server/net/rtmp/IRTMPHandler.java (revision 1603)
@@ -23,12 +23,36 @@
import org.red5.server.net.rtmp.codec.RTMP;
+/**
+ * RTMP events handler
+ */
public interface IRTMPHandler {
-
+ /**
+ * Connection open event
+ * @param conn Connection
+ * @param state RTMP state
+ */
public void connectionOpened(RTMPConnection conn, RTMP state);
-
+
+ /**
+ * Message recieved
+ * @param conn Connection
+ * @param state RTMP state
+ * @param message Message
+ * @throws Exception Exception
+ */
public void messageReceived(RTMPConnection conn, ProtocolState state, Object message) throws Exception;
-
+
+ /**
+ * Message sent
+ * @param conn Connection
+ * @param message Message
+ */
public void messageSent(RTMPConnection conn, Object message);
-
+
+ /**
+ * Connection closed
+ * @param conn Connection
+ * @param state RTMP state
+ */
public void connectionClosed(RTMPConnection conn, RTMP state);
Index: /java/server/trunk/src/org/red5/server/net/rtmp/BaseRTMPHandler.java
===================================================================
--- /java/server/trunk/src/org/red5/server/net/rtmp/BaseRTMPHandler.java (revision 1597)
+++ /java/server/trunk/src/org/red5/server/net/rtmp/BaseRTMPHandler.java (revision 1603)
@@ -19,8 +19,4 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
import org.apache.commons.logging.Log;
@@ -35,11 +31,5 @@
import org.red5.server.net.protocol.ProtocolState;
import org.red5.server.net.rtmp.codec.RTMP;
-import org.red5.server.net.rtmp.event.BytesRead;
-import org.red5.server.net.rtmp.event.ChunkSize;
-import org.red5.server.net.rtmp.event.IRTMPEvent;
-import org.red5.server.net.rtmp.event.Invoke;
-import org.red5.server.net.rtmp.event.Notify;
-import org.red5.server.net.rtmp.event.Ping;
-import org.red5.server.net.rtmp.event.Unknown;
+import org.red5.server.net.rtmp.event.*;
import org.red5.server.net.rtmp.message.Constants;
import org.red5.server.net.rtmp.message.Header;
@@ -49,4 +39,7 @@
import org.red5.server.stream.PlaylistSubscriberStream;
+import java.util.HashSet;
+import java.util.Set;
+
/**
* Base class for all RTMP handlers.
@@ -55,5 +48,7 @@
*/
public abstract class BaseRTMPHandler implements IRTMPHandler, Constants, StatusCodes {
-
+ /**
+ * Logger
+ */
protected static Log log = LogFactory.getLog(BaseRTMPHandler.class.getName());
@@ -62,7 +57,7 @@
/**
- * Getter for property 'streamId'.
+ * Getter for stream ID.
*
- * @return Value for property 'streamId'.
+ * @return Stream ID
*/ // XXX: HACK HACK HACK to support stream ids
public static int getStreamId() {
@@ -71,7 +66,7 @@
/**
- * Setter for property 'streamId'.
+ * Setter for stream Id.
*
- * @param id Value to set for property 'streamId'.
+ * @param id Stream id
*/
private static void setStreamId(int id) {
@@ -85,6 +80,5 @@
/** {@inheritDoc} */
- public void messageReceived(RTMPConnection conn, ProtocolState state,
- Object in) throws Exception {
+ public void messageReceived(RTMPConnection conn, ProtocolState state, Object in) throws Exception {
IRTMPEvent message = null;
@@ -208,4 +202,9 @@
}
+ /**
+ * Return hostname for URL
+ * @param url URL
+ * @return Hostname from that URL
+ */
protected String getHostname(String url) {
if (log.isDebugEnabled()) {
@@ -221,8 +220,20 @@
}
- protected abstract void onChunkSize(RTMPConnection conn, Channel channel,
- Header source, ChunkSize chunkSize);
-
- protected void handlePendingCallResult(RTMPConnection conn, Notify invoke) {
+ /**
+ * Chunk size change event handler. Abstract, to be implemented in subclasses.
+ * @param conn Connection
+ * @param channel Channel
+ * @param source Header
+ * @param chunkSize New chunk size
+ */
+ protected abstract void onChunkSize(RTMPConnection conn, Channel channel,
+ Header source, ChunkSize chunkSize);
+
+ /**
+ * Handler for pending call result. Dispatches results to all pending call handlers.
+ * @param conn Connection
+ * @param invoke Pending call result event context
+ */
+ protected void handlePendingCallResult(RTMPConnection conn, Notify invoke) {
final IServiceCall call = invoke.getCall();
final IPendingServiceCall pendingCall = conn.getPendingCall(invoke
@@ -244,29 +255,54 @@
HashSet<IPendingServiceCallback> tmp = new HashSet<IPendingServiceCallback>();
tmp.addAll(callbacks);
- Iterator<IPendingServiceCallback> it = tmp.iterator();
- while (it.hasNext()) {
- IPendingServiceCallback callback = it.next();
- try {
- callback.resultReceived(pendingCall);
- } catch (Exception e) {
- log.error("Error while executing callback " + callback,
- e);
- }
- }
- }
+ for (IPendingServiceCallback callback : tmp) {
+ try {
+ callback.resultReceived(pendingCall);
+ } catch (Exception e) {
+ log.error("Error while executing callback " + callback, e);
+ }
+ }
+ }
return;
}
- protected abstract void onInvoke(RTMPConnection conn, Channel channel,
+ /**
+ * Invocation event handler
+ * @param conn Connection
+ * @param channel Channel
+ * @param source Header
+ * @param invoke Invocation event context
+ */
+ protected abstract void onInvoke(RTMPConnection conn, Channel channel,
Header source, Notify invoke);
-
+
+ /**
+ * Ping event handler
+ * @param conn Connection
+ * @param channel Channel
+ * @param source Header
+ * @param ping Ping event context
+ */
protected abstract void onPing(RTMPConnection conn, Channel channel,
Header source, Ping ping);
- protected void onStreamBytesRead(RTMPConnection conn, Channel channel,
+ /**
+ * Stream bytes read event handler
+ * @param conn Connection
+ * @param channel Channel
+ * @param source Header
+ * @param streamBytesRead Bytes read event context
+ */
+ protected void onStreamBytesRead(RTMPConnection conn, Channel channel,
Header source, BytesRead streamBytesRead) {
conn.receivedBytesRead(streamBytesRead.getBytesRead());
}
+ /**
+ * Shared object event handler
+ * @param conn Connection
+ * @param channel Channel
+ * @param source Header
+ * @param object Shared object event context
+ */
protected abstract void onSharedObject(RTMPConnection conn, Channel channel,
Header source, SharedObjectMessage object);
Index: /java/server/trunk/src/org/red5/server/net/rtmp/RTMPMinaIoHandler.java
===================================================================
--- /java/server/trunk/src/org/red5/server/net/rtmp/RTMPMinaIoHandler.java (revision 1597)
+++ /java/server/trunk/src/org/red5/server/net/rtmp/RTMPMinaIoHandler.java (revision 1603)
@@ -36,19 +36,37 @@
import org.springframework.context.ApplicationContextAware;
+/**
+ * Handles all RTMP protocol events fired by MINA framework
+ */
public class RTMPMinaIoHandler extends IoHandlerAdapter
implements ApplicationContextAware {
-
+ /**
+ * Logger
+ */
protected static Log log = LogFactory.getLog(RTMPMinaIoHandler.class
.getName());
- protected IRTMPHandler handler;
- protected boolean mode = RTMP.MODE_SERVER;
-
+ /**
+ * RTMP events handler
+ */
+ protected IRTMPHandler handler;
+ /**
+ * Mode
+ */
+ protected boolean mode = RTMP.MODE_SERVER;
+ /**
+ * Application context
+ */
protected ApplicationContext appCtx;
- /**
- * Setter for property 'handler'.
+ /**
+ * RTMP protocol codec factory
+ */
+ private ProtocolCodecFactory codecFactory = null;
+
+ /**
+ * Setter for handler.
*
- * @param handler Value to set for property 'handler'.
+ * @param handler RTMP events handler
*/
public void setHandler(IRTMPHandler handler) {
@@ -57,7 +75,7 @@
/**
- * Setter for property 'mode'.
+ * Setter for mode.
*
- * @param mode Value to set for property 'mode'.
+ * @param mode <code>true</code> if handler should work in server mode, <code>false</code> otherwise
*/
public void setMode(boolean mode) {
@@ -65,10 +83,8 @@
}
- private ProtocolCodecFactory codecFactory = null;
-
/**
- * Setter for property 'codecFactory'.
+ * Setter for codec factory.
*
- * @param codecFactory Value to set for property 'codecFactory'.
+ * @param codecFactory RTMP protocol codec factory
*/
public void setCodecFactory(ProtocolCodecFactory codecFactory) {
@@ -102,9 +118,15 @@
}
- private void rawBufferRecieved(ProtocolState state, ByteBuffer in,
+ /**
+ * Handle raw buffer receiving event
+ * @param state Protocol state
+ * @param in Data buffer
+ * @param session I/O session, that is, connection between two endpoints
+ */
+ private void rawBufferRecieved(ProtocolState state, ByteBuffer in,
IoSession session) {
final RTMP rtmp = (RTMP) state;
- if (rtmp.getMode()==RTMP.MODE_SERVER) {
+ if (rtmp.getMode() == RTMP.MODE_SERVER) {
if (rtmp.getState() != RTMP.STATE_HANDSHAKE) {
log.warn("Raw buffer after handshake, something odd going on");
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