summaryrefslogtreecommitdiff
path: root/ACE/apps/JAWS3/small/SS_State_WRITE.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/apps/JAWS3/small/SS_State_WRITE.cpp')
-rw-r--r--ACE/apps/JAWS3/small/SS_State_WRITE.cpp78
1 files changed, 78 insertions, 0 deletions
diff --git a/ACE/apps/JAWS3/small/SS_State_WRITE.cpp b/ACE/apps/JAWS3/small/SS_State_WRITE.cpp
new file mode 100644
index 00000000000..2acb1f1b047
--- /dev/null
+++ b/ACE/apps/JAWS3/small/SS_State_WRITE.cpp
@@ -0,0 +1,78 @@
+// $Id$
+
+#include "ace/OS.h"
+#include "ace/FILE_Connector.h"
+#include "ace/FILE_Addr.h"
+#include "ace/FILE_IO.h"
+
+#include "jaws3/IO.h"
+
+#include "SS_State_WRITE.h"
+#include "SS_State_ERROR.h"
+#include "SS_State_DONE.h"
+#include "SS_Data.h"
+
+int
+TeraSS_State_WRITE::service (JAWS_Event_Completer *ec, void *data)
+{
+ JAWS_Event_Result fake_bad_result (0, JAWS_Event_Result::JE_ERROR);
+
+ // Retrieve context
+ TeraSS_Data *tdata = (TeraSS_Data *) data;
+
+ ACE_FILE_Addr file_addr (tdata->mb ().rd_ptr ());
+ ACE_FILE_Connector file_connector;
+
+ if (file_connector.connect ( tdata->file_io ()
+ , file_addr
+ , 0
+ , ACE_Addr::sap_any
+ , 0
+ , O_RDONLY
+ ) < 0)
+ {
+ ec->output_complete (fake_bad_result, & tdata->file_io ());
+ return 0;
+ }
+
+
+ JAWS_IO::instance ()->transmit ( tdata->peer ().get_handle ()
+ , tdata->file_io ().get_handle ()
+ , ec
+ , & tdata->file_io ()
+ );
+
+ return 0;
+}
+
+JAWS_Protocol_State *
+TeraSS_State_WRITE::transition ( const JAWS_Event_Result &result
+ , void *data
+ , void *act
+ )
+{
+ // Clean up FILE.
+
+ ((ACE_FILE_IO *) act)->close ();
+
+ // In the WRITE state, move to DONE state if success, ERROR if error.
+
+ JAWS_Protocol_State *next_state = 0;
+
+ switch (result.status ())
+ {
+ case JAWS_Event_Result::JE_OK:
+ next_state = TeraSS_State_DONE::instance ();
+ break;
+ case JAWS_Event_Result::JE_ERROR:
+ next_state = TeraSS_State_ERROR::instance ();
+ break;
+ default:
+ // Just bail unceremoniously.
+ next_state = TeraSS_State_DONE::instance ();
+ break;
+ }
+
+ return next_state;
+}
+