summaryrefslogtreecommitdiff
path: root/java/JACE/ASX/StreamTail.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/JACE/ASX/StreamTail.java')
-rw-r--r--java/JACE/ASX/StreamTail.java114
1 files changed, 114 insertions, 0 deletions
diff --git a/java/JACE/ASX/StreamTail.java b/java/JACE/ASX/StreamTail.java
new file mode 100644
index 00000000000..c1148a4c0f1
--- /dev/null
+++ b/java/JACE/ASX/StreamTail.java
@@ -0,0 +1,114 @@
+/*************************************************
+ *
+ * = PACKAGE
+ * JACE.ASX
+ *
+ * = FILENAME
+ * StreamTail.java
+ *
+ *@author Prashant Jain
+ *
+ *************************************************/
+package JACE.ASX;
+
+import JACE.OS.*;
+
+/**
+ * Standard module that acts as the tail of a ustream.
+ */
+public class StreamTail extends Task
+{
+ // Module that acts as the tail of a Stream.
+
+ public int open (Object obj)
+ {
+ return 0;
+ }
+
+ public int close (long l)
+ {
+ return 0;
+ }
+
+ public int svc ()
+ {
+ return -1;
+ }
+
+ private int control (MessageBlock mb)
+ {
+ IOCntlMsg ioc = (IOCntlMsg) mb.obj ();
+ int cmd = ioc.cmd ();
+
+ switch (cmd)
+ {
+ case IOCntlCmds.SET_LWM:
+ case IOCntlCmds.SET_HWM:
+ {
+ int size = mb.cont ().length ();
+
+ this.waterMarks (cmd, size);
+ this.sibling ().waterMarks (cmd, size);
+ ioc.rval (0);
+ break;
+ }
+ default:
+ mb.msgType (MessageType.MB_IOCNAK);
+ }
+ return this.reply (mb, null);
+ }
+
+ // Perform flush algorithm as though we were the driver
+ private int canonicalFlush (MessageBlock mb)
+ {
+ String s = mb.base ();
+ long f = (new Long (s)).longValue ();
+
+ if ((f & TaskFlags.ACE_FLUSHW) != 0)
+ {
+ this.flush (TaskFlags.ACE_FLUSHALL);
+ f &= ~TaskFlags.ACE_FLUSHW;
+ }
+ if ((f & TaskFlags.ACE_FLUSHR) != 0)
+ {
+ this.sibling ().flush (TaskFlags.ACE_FLUSHALL);
+ return this.reply (mb, null);
+ }
+ return 0;
+ }
+
+ // put the given MessageBlock without a timeout (block forever if
+ // necessary)
+ public int put (MessageBlock mb)
+ {
+ return this.put (mb, null);
+ }
+
+ // tv is an absolute time timeout
+ public int put (MessageBlock mb, TimeValue tv)
+ {
+ if (this.isWriter ())
+ {
+ switch (mb.msgType ())
+ {
+ case MessageType.MB_IOCTL:
+ return this.control (mb);
+ /* NOTREACHED */
+ default:
+ break;
+ }
+ }
+
+ return -1;
+ }
+
+ public void dump ()
+ {
+ }
+
+ public int handleTimeout (TimeValue tv, Object obj)
+ {
+ return 0;
+ }
+
+}