summaryrefslogtreecommitdiff
path: root/apps/JAWS
diff options
context:
space:
mode:
authorschmidt <douglascraigschmidt@users.noreply.github.com>1997-07-05 19:46:46 +0000
committerschmidt <douglascraigschmidt@users.noreply.github.com>1997-07-05 19:46:46 +0000
commitcbe83b855905dd5736574f0a61aab8c6f5d1acb5 (patch)
tree03aa1f12d08ea2863e0edd72951f306162cc2c49 /apps/JAWS
parentf6376ef8f359e7dba6df110f8a0b55ccc2d263c6 (diff)
downloadATCD-cbe83b855905dd5736574f0a61aab8c6f5d1acb5.tar.gz
*** empty log message ***
Diffstat (limited to 'apps/JAWS')
-rw-r--r--apps/JAWS/Makefile5
-rw-r--r--apps/JAWS/README10
-rw-r--r--apps/JAWS/clients/Blobby/Blob.cpp90
-rw-r--r--apps/JAWS/clients/Blobby/Blob.h82
-rw-r--r--apps/JAWS/clients/Blobby/Blob_Handler.cpp338
-rw-r--r--apps/JAWS/clients/Blobby/Blob_Handler.h110
-rw-r--r--apps/JAWS/clients/Blobby/Makefile350
-rw-r--r--apps/JAWS/clients/Blobby/Options.cpp79
-rw-r--r--apps/JAWS/clients/Blobby/Options.h66
-rw-r--r--apps/JAWS/clients/Blobby/README33
-rw-r--r--apps/JAWS/clients/Blobby/blobby.cpp97
-rw-r--r--apps/JAWS/clients/Blobby/blobby.mak694
-rw-r--r--apps/JAWS/clients/Blobby/blobby.mdpbin0 -> 51712 bytes
13 files changed, 1944 insertions, 10 deletions
diff --git a/apps/JAWS/Makefile b/apps/JAWS/Makefile
index 44fd29fbae2..81fe0e49407 100644
--- a/apps/JAWS/Makefile
+++ b/apps/JAWS/Makefile
@@ -1,7 +1,7 @@
#----------------------------------------------------------------------------
# @(#)Makefile 1.1 10/18/96
#
-# Makefile for the Gateway application
+# Makefile for JAWS
#----------------------------------------------------------------------------
#----------------------------------------------------------------------------
@@ -11,8 +11,7 @@
INFO = README
DIRS = server \
- client \
- stress_testing
+ client
#----------------------------------------------------------------------------
# Include macros and targets
diff --git a/apps/JAWS/README b/apps/JAWS/README
index 687b10690a2..d7d69cc4b47 100644
--- a/apps/JAWS/README
+++ b/apps/JAWS/README
@@ -6,14 +6,10 @@ http://www.cs.wustl.edu/~jxh/research/
The subdirectories in this directory contain the following components
- . client -- This contains the source code for an example
- application that exercises the file uploading and downloading
- features of JAWS
+ . client -- This contains the source code for various
+ client applications that exercise the file uploading and
+ downloading features of JAWS
. server -- This contains the source code for the JAWS
HTTP Web server. It illustrates a number of sophisticated
ACE concurrency and event demultiplexing strategies.
-
- . stress-testing -- This is the http_tester suite, an ACE
- based HTTP benchmarking tool, used to evaluate the
- performance of JAWS and other HTTP servers.
diff --git a/apps/JAWS/clients/Blobby/Blob.cpp b/apps/JAWS/clients/Blobby/Blob.cpp
new file mode 100644
index 00000000000..250dc572e36
--- /dev/null
+++ b/apps/JAWS/clients/Blobby/Blob.cpp
@@ -0,0 +1,90 @@
+// $Id$
+
+#include "Blob.h"
+#include "Blob_Handler.h"
+
+ACE_Blob::ACE_Blob (void)
+{
+}
+
+ACE_Blob::~ACE_Blob (void)
+{
+ this->close ();
+}
+
+// initialize address and filename. No network i/o in open
+
+int
+ACE_Blob::open (char *filename, char *hostname , u_short port)
+{
+ filename_ = ACE_OS::strdup(filename);
+ inet_addr_.set (port, hostname);
+ return 0;
+}
+
+
+// read from connection length bytes from offset, into Message block
+
+int
+ACE_Blob::read (ACE_Message_Block *mb, size_t length, size_t offset)
+{
+
+ // Create a Blob Reader
+ ACE_Blob_Reader blob_reader (mb, length, offset, filename_);
+ ACE_Blob_Handler *brp = &blob_reader;
+
+ // Connect to the server
+ if (connector_.connect (brp, inet_addr_) == -1)
+ ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "ACE_Blob::read():Connector error"), -1);
+
+ return blob_reader.byte_count ();
+
+}
+
+// write to connection length bytes from offset, into Message block
+
+int
+ACE_Blob::write (ACE_Message_Block *mb, size_t length, size_t offset)
+{
+
+ // Create a Blob Writer
+ ACE_Blob_Writer blob_writer (mb, length, offset, filename_);
+ ACE_Blob_Handler *bwp = &blob_writer;
+
+ // Connect to the server
+ if (connector_.connect (bwp, inet_addr_) == -1)
+ ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "ACE_Blob::write():Connector error"), -1);
+
+ return blob_writer.byte_count ();
+}
+
+// close down the blob
+
+int
+ACE_Blob::close (void)
+{
+
+ if (filename_)
+ {
+ ACE_OS::free ((void *) filename_);
+ filename_ = 0;
+ }
+ return 0;
+
+}
+
+#if defined (ACE_TEMPLATES_REQUIRE_SPECIALIZATION)
+template class ACE_Connector<ACE_Blob_Handler, ACE_SOCK_CONNECTOR>;
+template class ACE_Svc_Tuple <ACE_Blob_Handler>;
+template class ACE_Map_Entry<ACE_HANDLE, ACE_Svc_Tuple <ACE_Blob_Handler> *>;
+template class ACE_Map_Iterator<ACE_HANDLE, ACE_Svc_Tuple <ACE_Blob_Handler> *, ACE_SYNCH_RW_MUTEX>;
+template class ACE_Map_Manager<ACE_HANDLE, ACE_Svc_Tuple <ACE_Blob_Handler> *, ACE_SYNCH_RW_MUTEX>;
+
+#if defined (ACE_HAS_THREADS)
+ template class ACE_Guard<ACE_SYNCH_RW_MUTEX>;
+ template class ACE_Read_Guard<ACE_SYNCH_RW_MUTEX>;
+ template class ACE_Write_Guard<ACE_SYNCH_RW_MUTEX>;
+#else
+ // These are specialized in libACE if ACE doesn't have threads.
+#endif /* ACE_HAS_THREADS */
+#endif /* ACE_TEMPLATES_REQUIRE_SPECIALIZATION */
diff --git a/apps/JAWS/clients/Blobby/Blob.h b/apps/JAWS/clients/Blobby/Blob.h
new file mode 100644
index 00000000000..7f7c79076ec
--- /dev/null
+++ b/apps/JAWS/clients/Blobby/Blob.h
@@ -0,0 +1,82 @@
+/* -*- C++ -*- */
+// $Id$
+
+//============================================================================
+//
+// = LIBRARY
+// JAWS
+//
+// = FILENAME
+// Blob.h
+//
+// = DESCRIPTION
+// This is the ACE_Blob class, which is the API for doing file
+// uploads/downloads.
+//
+// = AUTHOR
+// Prashant Jain and Sumedh Mungee
+//
+//============================================================================
+
+#if !defined (ACE_BLOB_H)
+#define ACE_BLOB_H
+
+#include "ace/OS.h"
+#include "ace/Connector.h"
+#include "ace/INET_Addr.h"
+#include "ace/Svc_Handler.h"
+#include "ace/SOCK_Connector.h"
+#include "ace/Message_Block.h"
+#include "Blob_Handler.h"
+
+class ACE_Blob
+ // = TITLE
+ // Blob is intended to provide application API to
+ // classes that wish to do network i/o at a very
+ // high level of abstraction.
+ //
+ // = This class provides the ability to retrieve data from
+ // the network, of specified length and offset, and potentially
+ // use any protocol "under the hood" to do so. It currently
+ // uses HTTP. See Blob_Handler also.
+{
+public:
+ ACE_Blob (void);
+ ~ACE_Blob (void);
+
+ int open (char *filename,
+ char *hostname = ACE_DEFAULT_SERVER_HOST ,
+ u_short port = 80);
+ // initializes the class with the given filename, hostname and port.
+ // it should be called with the filename, before any read/write calls
+
+
+ int read (ACE_Message_Block *mb, size_t length, size_t offset);
+ // starts a connection, and reads a file from the server,
+ // of length and offset as specified, into Message_Block mb
+ // The message block should have capacity to hold length number
+ // of bytes
+
+ int write (ACE_Message_Block *mb, size_t length, size_t offset);
+ // starts a connection, and writes a file to the server,
+ // of length and offset as specified, from Message_Block mb
+ // thus the message block should contain atleast length + offset
+ // bytes of data
+
+
+ int close ();
+ // Frees memory allocated for filename.
+
+private:
+ ACE_INET_Addr inet_addr_;
+ // store the internet address of the server
+
+ char *filename_;
+ // The filename
+
+ ACE_Connector<ACE_Blob_Handler, ACE_SOCK_CONNECTOR> connector_;
+ // The connector endpoint to initiate the client connection
+
+};
+
+#endif /* ACE_BLOB_H */
diff --git a/apps/JAWS/clients/Blobby/Blob_Handler.cpp b/apps/JAWS/clients/Blobby/Blob_Handler.cpp
new file mode 100644
index 00000000000..28d98d46cd8
--- /dev/null
+++ b/apps/JAWS/clients/Blobby/Blob_Handler.cpp
@@ -0,0 +1,338 @@
+// $Id$
+
+#include "Blob_Handler.h"
+
+// Empty constructor for compliance with new Connector behavior.
+ACE_Blob_Handler::ACE_Blob_Handler (void)
+{
+}
+
+// Always use this constructor
+ACE_Blob_Handler::ACE_Blob_Handler (ACE_Message_Block * mb,
+ size_t length,
+ size_t offset,
+ char *filename) :
+ mb_ (mb),
+ length_ (length),
+ offset_ (offset),
+ filename_ (ACE_OS::strdup (filename)),
+ bytecount_ (0)
+{
+}
+
+ACE_Blob_Handler::~ACE_Blob_Handler (void)
+{
+ if (filename_)
+ {
+ ACE_OS::free ((void *) filename_);
+ filename_ = 0;
+ }
+}
+
+// Called by Connector after connection is established
+int
+ACE_Blob_Handler::open (void *)
+{
+ if (this->send_request () != 0)
+ ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "ACE_Blob_Handler::open():send_request failed"), -1);
+
+ if (this->receive_reply () != 0)
+ ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "ACE_Blob_Handler::open():receive_reply failed"), -1);
+ return 0;
+
+}
+
+// No-op
+int
+ACE_Blob_Handler::close (u_long flags)
+{
+ ACE_UNUSED_ARG (flags);
+ return 0;
+}
+
+
+// Always overridden by the derived classes
+int
+ACE_Blob_Handler::send_request (void)
+{
+ return -1;
+}
+
+// Always overridden by the derived classes
+int
+ACE_Blob_Handler::receive_reply (void)
+{
+ return -1;
+}
+
+// used to retrieve the number of bytes read/written by the
+// last operation on the Blob
+int
+ACE_Blob_Handler::byte_count (void)
+{
+ return bytecount_;
+}
+
+// Reader **************************************************
+
+ACE_Blob_Reader::ACE_Blob_Reader (ACE_Message_Block * mb,
+ size_t length,
+ size_t offset,
+ char *filename,
+ char *request_prefix,
+ char *request_suffix) :
+ ACE_Blob_Handler (mb, length, offset, filename),
+ request_prefix_ (request_prefix),
+ request_suffix_ (request_suffix)
+{
+}
+
+// Send the HTTP request
+int
+ACE_Blob_Reader::send_request (void)
+{
+ char mesg [MAX_HEADER_SIZE];
+
+ // Check to see if the request is too big
+ if ( MAX_HEADER_SIZE < (strlen (request_prefix_) + strlen (filename_) + strlen (request_suffix_) + 4))
+ ACE_ERROR_RETURN((LM_ERROR,"Request too large!"), -1);
+
+ // Create a message to send to the server requesting retrieval of the file
+ int len = ACE_OS::sprintf (mesg, "%s %s %s", request_prefix_, filename_, request_suffix_);
+
+ // Send the message to server
+ if (peer ().send_n (mesg, len) != len)
+ ACE_ERROR_RETURN((LM_ERROR,"Error sending request"), -1);
+
+
+ return 0;
+}
+
+// Recieve the HTTP Reply
+int
+ACE_Blob_Reader::receive_reply (void)
+{
+ ssize_t len;
+ char buf [MAX_HEADER_SIZE + 1];
+ char *buf_ptr;
+ int bytes_read = 0;
+ int bytes_left = length_;
+ int offset_left = offset_;
+
+ // Receive the first MAX_HEADER_SIZE bytes to be able to strip off the
+ // header. Note that we assume that the header will fit into the
+ // first MAX_HEADER_SIZE bytes of the transmitted data.
+ if ((len = peer ().recv_n (buf, MAX_HEADER_SIZE)) >= 0)
+ {
+ buf[len] = '\0';
+
+ // Search for the header termination string "\r\n\r\n", or "\n\n". If
+ // found, move past it to get to the data portion.
+ if ((buf_ptr = ACE_OS::strstr (buf,"\r\n\r\n")) != NULL)
+ buf_ptr += 4;
+ else if ((buf_ptr = ACE_OS::strstr (buf, "\n\n")) != NULL)
+ buf_ptr += 2;
+ else
+ buf_ptr = buf;
+
+ // Determine number of data bytes read. This is equal to the
+ // total butes read minus number of header bytes.
+ bytes_read = (buf + len) - buf_ptr;
+ }
+ else
+ ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "ACE_Blob_Reader::receiveReply():Error while reading header"), -1);
+
+ // ***************************************************************
+ // At this point, we have stripped off the header and are ready to
+ // process data. buf_ptr points to the data
+
+ // First adjust for offset. There are two cases:
+ // (1) The first block of data encountered the offset. In this case
+ // we simply increment the buf_ptr by offset.
+ // (2) The first block of data did not encounter the offset. That
+ // is, the offset needs to go past the number of data bytes already read.
+ if (bytes_read > offset_left)
+ {
+ // The first case is true -- that is offset is less than the
+ // data bytes we just read.
+ buf_ptr += offset_left;
+
+ // Determine how many data bytes are actually there. This is
+ // basically the total number of data bytes we read minus any
+ // offset we have.
+ int data_bytes = bytes_read - offset_left;
+
+ // Check for the case where the bytes read are enough to fulfill
+ // our request (for length bytes). If this is the case, then we
+ // don't need to do any extra recvs and can simply return with
+ // the data.
+ if (data_bytes >= bytes_left)
+ {
+ // The first block contains enough data to satisfy the
+ // length. So copy the data into the message buffer.
+ if (mb_->copy (buf_ptr, bytes_left) == -1)
+ ACE_ERROR_RETURN ((LM_ERROR, "%p\n",
+ "ACE Blob_Reader::receiveReply():Error copying data into Message_Block"), -1);
+ bytecount_ = length_;
+ return 0;
+ }
+
+ // Copy over all the data bytes into our message buffer.
+ if (mb_->copy (buf_ptr, data_bytes) == -1)
+ ACE_ERROR_RETURN ((LM_ERROR, "%p\n",
+ "ACE_Blob_Reader::receiveReply():Error copying data into Message_Block" ), -1);
+
+ // Adjust bytes left
+ bytes_left -= data_bytes;
+
+ // No more offset left. So set it to zero.
+ offset_left = 0;
+ }
+ else
+ {
+ // The second case is true -- that is offset is greater than
+ // the data bytes we just read.
+ offset_left -= bytes_read;
+ }
+
+ // If we had any offset left, take care of that.
+ while (offset_left > 0)
+ {
+ // MAX_HEADER_SIZE in which case we should do a receive of
+ // offset bytes into a temporary buffer. Otherwise, we should
+ // receive MAX_HEADER_SIZE bytes into temporary buffer and
+ // decrement offset_left.
+ if (offset_left < (int) (sizeof buf))
+ len = offset_left;
+ else
+ len = sizeof buf;
+ if (peer().recv_n (buf, len) != len)
+ ACE_ERROR_RETURN ((LM_ERROR, "%p\n",
+ "ACE_Blob_Reader::receiveReply():Read error" ),
+ -1);
+ offset_left -= len;
+ }
+
+ // *****************************************************************
+ // At this point we are all set to receive the actual data which the
+ // user wants. We have made adjustments for offset and are ready to
+ // receive the actual data. Receive the data directly into the
+ // message buffer.
+
+ len = peer().recv_n (mb_->wr_ptr (), bytes_left);
+
+ if (len != bytes_left)
+ ACE_ERROR_RETURN ((LM_ERROR, "%p\n",
+ "ACE_Blob_Reader::receiveReply():Read error" ), -1);
+
+ // Adjust the message buffer write pointer by number of bytes we
+ // received.
+ mb_->wr_ptr (len);
+
+ // Set the byte count to number of bytes received
+ this->bytecount_ = length_;
+
+ return 0;
+}
+
+// Writer **************************************************
+
+ACE_Blob_Writer::ACE_Blob_Writer (ACE_Message_Block * mb,
+ size_t length,
+ size_t offset,
+ char *filename,
+ char *request_prefix,
+ char *request_suffix) :
+ ACE_Blob_Handler (mb, length, offset, filename),
+ request_prefix_ (request_prefix),
+ request_suffix_ (request_suffix)
+{
+}
+
+int
+ACE_Blob_Writer::send_request (void)
+{
+ // Check for sanity -- check if we have any data to send.
+ if (offset_+ length_ > mb_->length ())
+ ACE_ERROR_RETURN((LM_ERROR, "%p\n",
+ "ACE_Blob_Writer::sendRequest():Invalid offset/length"), -1);
+
+ // Determine the length of the header message we will be sending to
+ // the server. Note that we add 32 for safety -- this corresponds to
+ // the number of bytes needed for the length field.
+ u_short mesglen =
+ ACE_OS::strlen (request_prefix_)
+ + ACE_OS::strlen (filename_)
+ + ACE_OS::strlen (request_suffix_)
+ + 32; // safety
+
+ // Allocate a buffer to hold the header
+ char *mesg;
+ ACE_NEW_RETURN (mesg, char [mesglen], -1);
+
+ // Create the header, store the actual length in mesglen
+ mesglen = ACE_OS::sprintf (mesg, "%s /%s %s %d\n\n",
+ request_prefix_, filename_, request_suffix_, length_);
+
+ // Send the header followed by the data
+
+ // First send the header
+ if (peer ().send_n (mesg, mesglen) == -1)
+ ACE_ERROR_RETURN((LM_ERROR, "%p\n", "Error sending request"), -1);
+
+ // "Consume" the offset by moving the read pointer of the message
+ // buffer
+ mb_->rd_ptr (offset_);
+
+ // Now send the data
+ if (peer ().send_n (mb_->rd_ptr (), length_) != (int)length_)
+ ACE_ERROR_RETURN((LM_ERROR, "%p\n", "Error sending file"), -1);
+
+ // Adjust the read pointer of the mesage buffer
+ mb_->rd_ptr (length_);
+
+ return 0;
+}
+
+int
+ACE_Blob_Writer::receive_reply (void)
+{
+ // Allocate a buffer big enough to hold the header
+ char buf[MAX_HEADER_SIZE];
+
+ // Receive the reply from the server
+ ssize_t len = peer ().recv_n (buf, sizeof buf - 1); // reserve one byte to store the \0
+ if (len ==-1)
+ ACE_ERROR_RETURN((LM_ERROR, "%p\n", "Error reading header"), -1);
+
+ buf [len] = 0;
+
+ // Parse the header
+ char *lasts;
+
+ // First check if this was a valid header -- HTTP/1.0
+ char *token = ACE_OS::strtok_r (buf, " \t", &lasts);
+
+ if ( (token == NULL) || (ACE_OS::strcasecmp (token, "HTTP/1.0") != 0))
+ ACE_ERROR_RETURN((LM_ERROR, "%p\n", "Did not receive a HTTP/1.0 response"), -1);
+
+ // Get the return code.
+ int return_code = ACE_OS::atoi (ACE_OS::strtok_r (NULL, " \t", &lasts));
+
+ // Check if the transaction succeeded. The only success codes are in
+ // the range of 200-299 (HTTP specification).
+ if (return_code >= 200 && return_code < 300)
+ return 0;
+ else
+ {
+ // Something went wrong!
+ // Get the description from the header message of what went wrong.
+ char *description = ACE_OS::strtok_r (NULL, "\n\r", &lasts);
+ ACE_ERROR_RETURN((LM_ERROR, "%p\n", description), -1);
+ }
+ return 0;
+}
+
+#if defined (ACE_TEMPLATES_REQUIRE_SPECIALIZATION)
+template class ACE_Svc_Handler <ACE_SOCK_STREAM, ACE_NULL_SYNCH>;
+#endif /* ACE_TEMPLATES_REQUIRE_SPECIALIZATION */
diff --git a/apps/JAWS/clients/Blobby/Blob_Handler.h b/apps/JAWS/clients/Blobby/Blob_Handler.h
new file mode 100644
index 00000000000..31012824491
--- /dev/null
+++ b/apps/JAWS/clients/Blobby/Blob_Handler.h
@@ -0,0 +1,110 @@
+/* -*- C++ -*- */
+// $Id$
+
+//============================================================================
+//
+// = LIBRARY
+// JAWS
+//
+// = FILENAME
+// Blob.h
+//
+// = DESCRIPTION
+// ACE_Blob_Handler is a base class for ACE_Blob_Reader and
+// ACE_Blob_Writer which are created in response to calls to
+// read/write, as appropriate
+//
+// = AUTHOR
+// Prashant Jain and Sumedh Mungee
+//
+//============================================================================
+
+#if !defined (ACE_BLOB_HANDLER_H)
+#define ACE_BLOB_HANDLER_H
+
+#include "ace/OS.h"
+#include "ace/INET_Addr.h"
+#include "ace/Svc_Handler.h"
+#include "ace/Message_Block.h"
+
+class ACE_Blob_Handler : public ACE_Svc_Handler <ACE_SOCK_STREAM, ACE_NULL_SYNCH>
+ // = TITLE
+ // Blob is intended to provide application API to
+ // classes that wish to do network i/o at a very
+ // high level of abstraction.
+ //
+ // = This class provides the ability to retrieve data from
+ // the network, of specified length and offset, and potentially
+ // use any protocol "under the hood" to do so. It currently
+ // uses HTTP. See Blob_Handler also.
+{
+public:
+ ACE_Blob_Handler (void);
+ // Null constructor, insures that it works properly with Connector
+
+ ACE_Blob_Handler (ACE_Message_Block *mb, size_t length, size_t offset, char *filename);
+ // Always use this constructor to make Blob_Handlers
+
+ int byte_count (void);
+ // returns the number of bytes read/written in the last operation.
+
+ virtual int open (void * = 0);
+ // Activate this instance of the <ACE_Blob_Handler>
+
+ virtual int close (u_long flags = 0);
+ // Close down the Blob
+
+ ~ACE_Blob_Handler (void);
+
+protected:
+ virtual int send_request (void);
+ virtual int receive_reply (void);
+
+ ACE_Message_Block *mb_;
+ size_t length_;
+ size_t offset_;
+ char *filename_;
+ int bytecount_;
+ enum
+ {
+ MAX_HEADER_SIZE = 2048
+ // The handler assumes that the first 2048 bytes of a server response
+ // contains the header
+ };
+};
+
+class ACE_Blob_Reader : public ACE_Blob_Handler
+{
+public:
+ ACE_Blob_Reader (ACE_Message_Block *mb,
+ size_t length,
+ size_t offset,
+ char *filename,
+ char *request_prefix = "GET",
+ char *request_suffix = "HTTP/1.0\r\n\r\n");
+
+private:
+ int send_request (void);
+ int receive_reply (void);
+ const char *request_prefix_;
+ const char *request_suffix_;
+};
+
+class ACE_Blob_Writer : public ACE_Blob_Handler
+{
+public:
+ ACE_Blob_Writer (ACE_Message_Block *mb,
+ size_t length,
+ size_t offset,
+ char *filename,
+ char *request_prefix = "PUT",
+ char *request_suffix = "HTTP/1.0\nContent-length:");
+
+private:
+ int send_request (void);
+ int receive_reply (void);
+ const char *request_prefix_;
+ const char *request_suffix_;
+};
+
+#endif /* ACE_BLOB_HANDLER_H */
diff --git a/apps/JAWS/clients/Blobby/Makefile b/apps/JAWS/clients/Blobby/Makefile
new file mode 100644
index 00000000000..0c0455118fe
--- /dev/null
+++ b/apps/JAWS/clients/Blobby/Makefile
@@ -0,0 +1,350 @@
+#----------------------------------------------------------------------------
+# %W% %G%
+#
+# Makefile for the ACE Adapter Web Server (JAWS) client
+#----------------------------------------------------------------------------
+
+#----------------------------------------------------------------------------
+# Local macros
+#----------------------------------------------------------------------------
+
+BIN = blobby
+
+FILES = Blob \
+ Blob_Handler \
+ Options
+
+LSRC = $(addsuffix .cpp,$(FILES))
+LOBJ = $(addsuffix .o,$(FILES))
+SHOBJ = $(addsuffix .so,$(FILES))
+
+LDLIBS = $(addprefix .shobj/,$(SHOBJ))
+
+VLDLIBS = $(LDLIBS:%=%$(VAR))
+
+BUILD = $(VBIN)
+
+#----------------------------------------------------------------------------
+# Include macros and targets
+#----------------------------------------------------------------------------
+
+include $(WRAPPER_ROOT)/include/makeinclude/wrapper_macros.GNU
+include $(WRAPPER_ROOT)/include/makeinclude/macros.GNU
+include $(WRAPPER_ROOT)/include/makeinclude/rules.common.GNU
+include $(WRAPPER_ROOT)/include/makeinclude/rules.nonested.GNU
+include $(WRAPPER_ROOT)/include/makeinclude/rules.lib.GNU
+include $(WRAPPER_ROOT)/include/makeinclude/rules.bin.GNU
+include $(WRAPPER_ROOT)/include/makeinclude/rules.local.GNU
+
+#----------------------------------------------------------------------------
+# Local targets
+#----------------------------------------------------------------------------
+
+#----------------------------------------------------------------------------
+# Dependencies
+#----------------------------------------------------------------------------
+# DO NOT DELETE THIS LINE -- g++dep uses it.
+# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
+
+.obj/Blob.o .shobj/Blob.so: Blob.cpp Blob.h \
+ $(WRAPPER_ROOT)/ace/OS.h \
+ $(WRAPPER_ROOT)/ace/config.h \
+ $(WRAPPER_ROOT)/ace/stdcpp.h \
+ $(WRAPPER_ROOT)/ace/OS.i \
+ $(WRAPPER_ROOT)/ace/Trace.h \
+ $(WRAPPER_ROOT)/ace/Log_Msg.h \
+ $(WRAPPER_ROOT)/ace/Log_Record.h \
+ $(WRAPPER_ROOT)/ace/Log_Priority.h \
+ $(WRAPPER_ROOT)/ace/ACE.h \
+ $(WRAPPER_ROOT)/ace/ACE.i \
+ $(WRAPPER_ROOT)/ace/Log_Record.i \
+ $(WRAPPER_ROOT)/ace/Connector.h \
+ $(WRAPPER_ROOT)/ace/Service_Config.h \
+ $(WRAPPER_ROOT)/ace/Service_Object.h \
+ $(WRAPPER_ROOT)/ace/Shared_Object.h \
+ $(WRAPPER_ROOT)/ace/Shared_Object.i \
+ $(WRAPPER_ROOT)/ace/Event_Handler.h \
+ $(WRAPPER_ROOT)/ace/Event_Handler.i \
+ $(WRAPPER_ROOT)/ace/Service_Object.i \
+ $(WRAPPER_ROOT)/ace/Thread_Manager.h \
+ $(WRAPPER_ROOT)/ace/Thread.h \
+ $(WRAPPER_ROOT)/ace/Thread.i \
+ $(WRAPPER_ROOT)/ace/Synch.h \
+ $(WRAPPER_ROOT)/ace/SV_Semaphore_Complex.h \
+ $(WRAPPER_ROOT)/ace/SV_Semaphore_Simple.h \
+ $(WRAPPER_ROOT)/ace/SV_Semaphore_Simple.i \
+ $(WRAPPER_ROOT)/ace/SV_Semaphore_Complex.i \
+ $(WRAPPER_ROOT)/ace/Synch.i \
+ $(WRAPPER_ROOT)/ace/Synch_T.h \
+ $(WRAPPER_ROOT)/ace/Synch_T.i \
+ $(WRAPPER_ROOT)/ace/Thread_Manager.i \
+ $(WRAPPER_ROOT)/ace/Signal.h \
+ $(WRAPPER_ROOT)/ace/Containers.h \
+ $(WRAPPER_ROOT)/ace/Containers.i \
+ $(WRAPPER_ROOT)/ace/Signal.i \
+ $(WRAPPER_ROOT)/ace/Service_Config.i \
+ $(WRAPPER_ROOT)/ace/Reactor.h \
+ $(WRAPPER_ROOT)/ace/Handle_Set.h \
+ $(WRAPPER_ROOT)/ace/Handle_Set.i \
+ $(WRAPPER_ROOT)/ace/Timer_Queue.h \
+ $(WRAPPER_ROOT)/ace/Timer_Queue_T.h \
+ $(WRAPPER_ROOT)/ace/Time_Value.h \
+ $(WRAPPER_ROOT)/ace/Timer_Queue_T.i \
+ $(WRAPPER_ROOT)/ace/Token.h \
+ $(WRAPPER_ROOT)/ace/Token.i \
+ $(WRAPPER_ROOT)/ace/Pipe.h \
+ $(WRAPPER_ROOT)/ace/Pipe.i \
+ $(WRAPPER_ROOT)/ace/SOCK_Stream.h \
+ $(WRAPPER_ROOT)/ace/SOCK_IO.h \
+ $(WRAPPER_ROOT)/ace/SOCK.h \
+ $(WRAPPER_ROOT)/ace/Addr.h \
+ $(WRAPPER_ROOT)/ace/Addr.i \
+ $(WRAPPER_ROOT)/ace/IPC_SAP.h \
+ $(WRAPPER_ROOT)/ace/IPC_SAP.i \
+ $(WRAPPER_ROOT)/ace/SOCK.i \
+ $(WRAPPER_ROOT)/ace/SOCK_IO.i \
+ $(WRAPPER_ROOT)/ace/INET_Addr.h \
+ $(WRAPPER_ROOT)/ace/INET_Addr.i \
+ $(WRAPPER_ROOT)/ace/SOCK_Stream.i \
+ $(WRAPPER_ROOT)/ace/Reactor.i \
+ $(WRAPPER_ROOT)/ace/Proactor.h \
+ $(WRAPPER_ROOT)/ace/Asynch_IO.h \
+ $(WRAPPER_ROOT)/ace/Timer_List.h \
+ $(WRAPPER_ROOT)/ace/Timer_List_T.h \
+ $(WRAPPER_ROOT)/ace/Timer_Heap.h \
+ $(WRAPPER_ROOT)/ace/Timer_Heap_T.h \
+ $(WRAPPER_ROOT)/ace/Timer_Wheel.h \
+ $(WRAPPER_ROOT)/ace/Timer_Wheel_T.h \
+ $(WRAPPER_ROOT)/ace/ReactorEx.h \
+ $(WRAPPER_ROOT)/ace/Message_Queue.h \
+ $(WRAPPER_ROOT)/ace/Message_Block.h \
+ $(WRAPPER_ROOT)/ace/Malloc.h \
+ $(WRAPPER_ROOT)/ace/Malloc.i \
+ $(WRAPPER_ROOT)/ace/Malloc_T.h \
+ $(WRAPPER_ROOT)/ace/Malloc_T.i \
+ $(WRAPPER_ROOT)/ace/Memory_Pool.h \
+ $(WRAPPER_ROOT)/ace/Mem_Map.h \
+ $(WRAPPER_ROOT)/ace/Mem_Map.i \
+ $(WRAPPER_ROOT)/ace/Memory_Pool.i \
+ $(WRAPPER_ROOT)/ace/Message_Block.i \
+ $(WRAPPER_ROOT)/ace/IO_Cntl_Msg.h \
+ $(WRAPPER_ROOT)/ace/Strategies.h \
+ $(WRAPPER_ROOT)/ace/Strategies_T.h \
+ $(WRAPPER_ROOT)/ace/Synch_Options.h \
+ $(WRAPPER_ROOT)/ace/Hash_Map_Manager.h \
+ $(WRAPPER_ROOT)/ace/Message_Queue.i \
+ $(WRAPPER_ROOT)/ace/ReactorEx.i \
+ $(WRAPPER_ROOT)/ace/Svc_Conf_Tokens.h \
+ $(WRAPPER_ROOT)/ace/Map_Manager.h \
+ $(WRAPPER_ROOT)/ace/Map_Manager.i \
+ $(WRAPPER_ROOT)/ace/Svc_Handler.h \
+ $(WRAPPER_ROOT)/ace/Task.h \
+ $(WRAPPER_ROOT)/ace/Task.i \
+ $(WRAPPER_ROOT)/ace/Task_T.h \
+ $(WRAPPER_ROOT)/ace/Task_T.i \
+ $(WRAPPER_ROOT)/ace/Svc_Handler.i \
+ $(WRAPPER_ROOT)/ace/Connector.i \
+ $(WRAPPER_ROOT)/ace/SOCK_Connector.h \
+ $(WRAPPER_ROOT)/ace/SOCK_Connector.i \
+ Blob_Handler.h
+.obj/Blob_Handler.o .shobj/Blob_Handler.so: Blob_Handler.cpp Blob_Handler.h \
+ $(WRAPPER_ROOT)/ace/OS.h \
+ $(WRAPPER_ROOT)/ace/config.h \
+ $(WRAPPER_ROOT)/ace/stdcpp.h \
+ $(WRAPPER_ROOT)/ace/OS.i \
+ $(WRAPPER_ROOT)/ace/Trace.h \
+ $(WRAPPER_ROOT)/ace/Log_Msg.h \
+ $(WRAPPER_ROOT)/ace/Log_Record.h \
+ $(WRAPPER_ROOT)/ace/Log_Priority.h \
+ $(WRAPPER_ROOT)/ace/ACE.h \
+ $(WRAPPER_ROOT)/ace/ACE.i \
+ $(WRAPPER_ROOT)/ace/Log_Record.i \
+ $(WRAPPER_ROOT)/ace/INET_Addr.h \
+ $(WRAPPER_ROOT)/ace/Addr.h \
+ $(WRAPPER_ROOT)/ace/Addr.i \
+ $(WRAPPER_ROOT)/ace/INET_Addr.i \
+ $(WRAPPER_ROOT)/ace/Svc_Handler.h \
+ $(WRAPPER_ROOT)/ace/Synch_Options.h \
+ $(WRAPPER_ROOT)/ace/Task.h \
+ $(WRAPPER_ROOT)/ace/Service_Object.h \
+ $(WRAPPER_ROOT)/ace/Shared_Object.h \
+ $(WRAPPER_ROOT)/ace/Shared_Object.i \
+ $(WRAPPER_ROOT)/ace/Event_Handler.h \
+ $(WRAPPER_ROOT)/ace/Event_Handler.i \
+ $(WRAPPER_ROOT)/ace/Service_Object.i \
+ $(WRAPPER_ROOT)/ace/Thread_Manager.h \
+ $(WRAPPER_ROOT)/ace/Thread.h \
+ $(WRAPPER_ROOT)/ace/Thread.i \
+ $(WRAPPER_ROOT)/ace/Synch.h \
+ $(WRAPPER_ROOT)/ace/SV_Semaphore_Complex.h \
+ $(WRAPPER_ROOT)/ace/SV_Semaphore_Simple.h \
+ $(WRAPPER_ROOT)/ace/SV_Semaphore_Simple.i \
+ $(WRAPPER_ROOT)/ace/SV_Semaphore_Complex.i \
+ $(WRAPPER_ROOT)/ace/Synch.i \
+ $(WRAPPER_ROOT)/ace/Synch_T.h \
+ $(WRAPPER_ROOT)/ace/Synch_T.i \
+ $(WRAPPER_ROOT)/ace/Thread_Manager.i \
+ $(WRAPPER_ROOT)/ace/Task.i \
+ $(WRAPPER_ROOT)/ace/Task_T.h \
+ $(WRAPPER_ROOT)/ace/Message_Queue.h \
+ $(WRAPPER_ROOT)/ace/Message_Block.h \
+ $(WRAPPER_ROOT)/ace/Malloc.h \
+ $(WRAPPER_ROOT)/ace/Malloc.i \
+ $(WRAPPER_ROOT)/ace/Malloc_T.h \
+ $(WRAPPER_ROOT)/ace/Malloc_T.i \
+ $(WRAPPER_ROOT)/ace/Memory_Pool.h \
+ $(WRAPPER_ROOT)/ace/Signal.h \
+ $(WRAPPER_ROOT)/ace/Containers.h \
+ $(WRAPPER_ROOT)/ace/Containers.i \
+ $(WRAPPER_ROOT)/ace/Signal.i \
+ $(WRAPPER_ROOT)/ace/Mem_Map.h \
+ $(WRAPPER_ROOT)/ace/Mem_Map.i \
+ $(WRAPPER_ROOT)/ace/Memory_Pool.i \
+ $(WRAPPER_ROOT)/ace/Message_Block.i \
+ $(WRAPPER_ROOT)/ace/IO_Cntl_Msg.h \
+ $(WRAPPER_ROOT)/ace/Strategies.h \
+ $(WRAPPER_ROOT)/ace/Strategies_T.h \
+ $(WRAPPER_ROOT)/ace/Service_Config.h \
+ $(WRAPPER_ROOT)/ace/Service_Config.i \
+ $(WRAPPER_ROOT)/ace/Reactor.h \
+ $(WRAPPER_ROOT)/ace/Handle_Set.h \
+ $(WRAPPER_ROOT)/ace/Handle_Set.i \
+ $(WRAPPER_ROOT)/ace/Timer_Queue.h \
+ $(WRAPPER_ROOT)/ace/Timer_Queue_T.h \
+ $(WRAPPER_ROOT)/ace/Time_Value.h \
+ $(WRAPPER_ROOT)/ace/Timer_Queue_T.i \
+ $(WRAPPER_ROOT)/ace/Token.h \
+ $(WRAPPER_ROOT)/ace/Token.i \
+ $(WRAPPER_ROOT)/ace/Pipe.h \
+ $(WRAPPER_ROOT)/ace/Pipe.i \
+ $(WRAPPER_ROOT)/ace/SOCK_Stream.h \
+ $(WRAPPER_ROOT)/ace/SOCK_IO.h \
+ $(WRAPPER_ROOT)/ace/SOCK.h \
+ $(WRAPPER_ROOT)/ace/IPC_SAP.h \
+ $(WRAPPER_ROOT)/ace/IPC_SAP.i \
+ $(WRAPPER_ROOT)/ace/SOCK.i \
+ $(WRAPPER_ROOT)/ace/SOCK_IO.i \
+ $(WRAPPER_ROOT)/ace/SOCK_Stream.i \
+ $(WRAPPER_ROOT)/ace/Reactor.i \
+ $(WRAPPER_ROOT)/ace/Proactor.h \
+ $(WRAPPER_ROOT)/ace/Asynch_IO.h \
+ $(WRAPPER_ROOT)/ace/Timer_List.h \
+ $(WRAPPER_ROOT)/ace/Timer_List_T.h \
+ $(WRAPPER_ROOT)/ace/Timer_Heap.h \
+ $(WRAPPER_ROOT)/ace/Timer_Heap_T.h \
+ $(WRAPPER_ROOT)/ace/Timer_Wheel.h \
+ $(WRAPPER_ROOT)/ace/Timer_Wheel_T.h \
+ $(WRAPPER_ROOT)/ace/ReactorEx.h \
+ $(WRAPPER_ROOT)/ace/ReactorEx.i \
+ $(WRAPPER_ROOT)/ace/Svc_Conf_Tokens.h \
+ $(WRAPPER_ROOT)/ace/Hash_Map_Manager.h \
+ $(WRAPPER_ROOT)/ace/Message_Queue.i \
+ $(WRAPPER_ROOT)/ace/Task_T.i \
+ $(WRAPPER_ROOT)/ace/Svc_Handler.i
+.obj/Options.o .shobj/Options.so: Options.cpp Blob.h \
+ $(WRAPPER_ROOT)/ace/OS.h \
+ $(WRAPPER_ROOT)/ace/config.h \
+ $(WRAPPER_ROOT)/ace/stdcpp.h \
+ $(WRAPPER_ROOT)/ace/OS.i \
+ $(WRAPPER_ROOT)/ace/Trace.h \
+ $(WRAPPER_ROOT)/ace/Log_Msg.h \
+ $(WRAPPER_ROOT)/ace/Log_Record.h \
+ $(WRAPPER_ROOT)/ace/Log_Priority.h \
+ $(WRAPPER_ROOT)/ace/ACE.h \
+ $(WRAPPER_ROOT)/ace/ACE.i \
+ $(WRAPPER_ROOT)/ace/Log_Record.i \
+ $(WRAPPER_ROOT)/ace/Connector.h \
+ $(WRAPPER_ROOT)/ace/Service_Config.h \
+ $(WRAPPER_ROOT)/ace/Service_Object.h \
+ $(WRAPPER_ROOT)/ace/Shared_Object.h \
+ $(WRAPPER_ROOT)/ace/Shared_Object.i \
+ $(WRAPPER_ROOT)/ace/Event_Handler.h \
+ $(WRAPPER_ROOT)/ace/Event_Handler.i \
+ $(WRAPPER_ROOT)/ace/Service_Object.i \
+ $(WRAPPER_ROOT)/ace/Thread_Manager.h \
+ $(WRAPPER_ROOT)/ace/Thread.h \
+ $(WRAPPER_ROOT)/ace/Thread.i \
+ $(WRAPPER_ROOT)/ace/Synch.h \
+ $(WRAPPER_ROOT)/ace/SV_Semaphore_Complex.h \
+ $(WRAPPER_ROOT)/ace/SV_Semaphore_Simple.h \
+ $(WRAPPER_ROOT)/ace/SV_Semaphore_Simple.i \
+ $(WRAPPER_ROOT)/ace/SV_Semaphore_Complex.i \
+ $(WRAPPER_ROOT)/ace/Synch.i \
+ $(WRAPPER_ROOT)/ace/Synch_T.h \
+ $(WRAPPER_ROOT)/ace/Synch_T.i \
+ $(WRAPPER_ROOT)/ace/Thread_Manager.i \
+ $(WRAPPER_ROOT)/ace/Signal.h \
+ $(WRAPPER_ROOT)/ace/Containers.h \
+ $(WRAPPER_ROOT)/ace/Containers.i \
+ $(WRAPPER_ROOT)/ace/Signal.i \
+ $(WRAPPER_ROOT)/ace/Service_Config.i \
+ $(WRAPPER_ROOT)/ace/Reactor.h \
+ $(WRAPPER_ROOT)/ace/Handle_Set.h \
+ $(WRAPPER_ROOT)/ace/Handle_Set.i \
+ $(WRAPPER_ROOT)/ace/Timer_Queue.h \
+ $(WRAPPER_ROOT)/ace/Timer_Queue_T.h \
+ $(WRAPPER_ROOT)/ace/Time_Value.h \
+ $(WRAPPER_ROOT)/ace/Timer_Queue_T.i \
+ $(WRAPPER_ROOT)/ace/Token.h \
+ $(WRAPPER_ROOT)/ace/Token.i \
+ $(WRAPPER_ROOT)/ace/Pipe.h \
+ $(WRAPPER_ROOT)/ace/Pipe.i \
+ $(WRAPPER_ROOT)/ace/SOCK_Stream.h \
+ $(WRAPPER_ROOT)/ace/SOCK_IO.h \
+ $(WRAPPER_ROOT)/ace/SOCK.h \
+ $(WRAPPER_ROOT)/ace/Addr.h \
+ $(WRAPPER_ROOT)/ace/Addr.i \
+ $(WRAPPER_ROOT)/ace/IPC_SAP.h \
+ $(WRAPPER_ROOT)/ace/IPC_SAP.i \
+ $(WRAPPER_ROOT)/ace/SOCK.i \
+ $(WRAPPER_ROOT)/ace/SOCK_IO.i \
+ $(WRAPPER_ROOT)/ace/INET_Addr.h \
+ $(WRAPPER_ROOT)/ace/INET_Addr.i \
+ $(WRAPPER_ROOT)/ace/SOCK_Stream.i \
+ $(WRAPPER_ROOT)/ace/Reactor.i \
+ $(WRAPPER_ROOT)/ace/Proactor.h \
+ $(WRAPPER_ROOT)/ace/Asynch_IO.h \
+ $(WRAPPER_ROOT)/ace/Timer_List.h \
+ $(WRAPPER_ROOT)/ace/Timer_List_T.h \
+ $(WRAPPER_ROOT)/ace/Timer_Heap.h \
+ $(WRAPPER_ROOT)/ace/Timer_Heap_T.h \
+ $(WRAPPER_ROOT)/ace/Timer_Wheel.h \
+ $(WRAPPER_ROOT)/ace/Timer_Wheel_T.h \
+ $(WRAPPER_ROOT)/ace/ReactorEx.h \
+ $(WRAPPER_ROOT)/ace/Message_Queue.h \
+ $(WRAPPER_ROOT)/ace/Message_Block.h \
+ $(WRAPPER_ROOT)/ace/Malloc.h \
+ $(WRAPPER_ROOT)/ace/Malloc.i \
+ $(WRAPPER_ROOT)/ace/Malloc_T.h \
+ $(WRAPPER_ROOT)/ace/Malloc_T.i \
+ $(WRAPPER_ROOT)/ace/Memory_Pool.h \
+ $(WRAPPER_ROOT)/ace/Mem_Map.h \
+ $(WRAPPER_ROOT)/ace/Mem_Map.i \
+ $(WRAPPER_ROOT)/ace/Memory_Pool.i \
+ $(WRAPPER_ROOT)/ace/Message_Block.i \
+ $(WRAPPER_ROOT)/ace/IO_Cntl_Msg.h \
+ $(WRAPPER_ROOT)/ace/Strategies.h \
+ $(WRAPPER_ROOT)/ace/Strategies_T.h \
+ $(WRAPPER_ROOT)/ace/Synch_Options.h \
+ $(WRAPPER_ROOT)/ace/Hash_Map_Manager.h \
+ $(WRAPPER_ROOT)/ace/Message_Queue.i \
+ $(WRAPPER_ROOT)/ace/ReactorEx.i \
+ $(WRAPPER_ROOT)/ace/Svc_Conf_Tokens.h \
+ $(WRAPPER_ROOT)/ace/Map_Manager.h \
+ $(WRAPPER_ROOT)/ace/Map_Manager.i \
+ $(WRAPPER_ROOT)/ace/Svc_Handler.h \
+ $(WRAPPER_ROOT)/ace/Task.h \
+ $(WRAPPER_ROOT)/ace/Task.i \
+ $(WRAPPER_ROOT)/ace/Task_T.h \
+ $(WRAPPER_ROOT)/ace/Task_T.i \
+ $(WRAPPER_ROOT)/ace/Svc_Handler.i \
+ $(WRAPPER_ROOT)/ace/Connector.i \
+ $(WRAPPER_ROOT)/ace/SOCK_Connector.h \
+ $(WRAPPER_ROOT)/ace/SOCK_Connector.i \
+ Blob_Handler.h \
+ $(WRAPPER_ROOT)/ace/Get_Opt.h \
+ $(WRAPPER_ROOT)/ace/Get_Opt.i \
+ $(WRAPPER_ROOT)/ace/ARGV.h \
+ $(WRAPPER_ROOT)/ace/ARGV.i Options.h
+
+# IF YOU PUT ANYTHING HERE IT WILL GO AWAY
diff --git a/apps/JAWS/clients/Blobby/Options.cpp b/apps/JAWS/clients/Blobby/Options.cpp
new file mode 100644
index 00000000000..3c8a9dece3a
--- /dev/null
+++ b/apps/JAWS/clients/Blobby/Options.cpp
@@ -0,0 +1,79 @@
+// $Id$
+
+#include "Blob.h"
+#include "Blob_Handler.h"
+#include "ace/Get_Opt.h"
+#include "ace/ARGV.h"
+#include "Options.h"
+
+Options *Options::instance_ = 0;
+
+Options *
+Options::instance (void)
+{
+
+ if (Options::instance_ == 0)
+ Options::instance_ = new Options;
+
+ return Options::instance_;
+}
+
+void
+Options::parse_args (int argc, char *argv[])
+{
+ ACE_Get_Opt get_opt (argc, argv, "rwh:p:f:l:o:d");
+
+ int c;
+
+ while ((c = get_opt ()) != -1)
+ switch (c)
+ {
+ case 'd':
+ this->debug_ = 1;
+ break;
+ case 'r':
+ this->operation_ = 'r';
+ break;
+ case 'w':
+ this->operation_ = 'w';
+ break;
+ case 'h':
+ this->hostname_ = get_opt.optarg;
+ break;
+ case 'p':
+ this->port_ = ACE_OS::atoi (get_opt.optarg);
+ break;
+ case 'f':
+ this->filename_ = get_opt.optarg;
+ break;
+ case 'l':
+ this->length_ = ACE_OS::atoi (get_opt.optarg);
+ break;
+ case 'o':
+ this->offset_ = ACE_OS::atoi (get_opt.optarg);
+ break;
+ // Usage fallthrough.
+ default:
+ ACE_DEBUG ((LM_DEBUG, "%s -h hostname -f filename -[r/w] [-p port] [-l length] [-o offset] [-d]\n", argv[0]));
+ ACE_OS::exit (1);
+ }
+ if (this->hostname_ == NULL || this->filename_ == NULL)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "%s -h hostname -f filename -[r/w] [-p port] [-l length] [-o offset] [-d]\n",
+ argv[0]));
+ ACE_OS::exit (1);
+ }
+
+}
+
+Options::Options (void)
+ : hostname_ (NULL),
+ port_ (ACE_DEFAULT_HTTP_SERVER_PORT),
+ filename_ (NULL),
+ length_ (0),
+ offset_ (0),
+ operation_ ('r'),
+ debug_ (0)
+{
+}
diff --git a/apps/JAWS/clients/Blobby/Options.h b/apps/JAWS/clients/Blobby/Options.h
new file mode 100644
index 00000000000..086fa003a37
--- /dev/null
+++ b/apps/JAWS/clients/Blobby/Options.h
@@ -0,0 +1,66 @@
+/* -*- C++ -*- */
+// $Id$
+
+//============================================================================
+//
+// = LIBRARY
+// JAWS
+//
+// = FILENAME
+// Options.h
+//
+// = DESCRIPTION
+// Options is an Singleton for blobby
+//
+// = AUTHOR
+// Prashant Jain and Sumedh Mungee
+//
+//============================================================================
+
+#if !defined (ACE_BLOBBY_OPTIONS_H)
+#define ACE_BLOBBY_OPTIONS_H
+
+#include "Blob.h"
+#include "Blob_Handler.h"
+#include "ace/Get_Opt.h"
+#include "ace/ARGV.h"
+
+class Options
+{
+public:
+ static Options *instance (void);
+ // Returns the singleton instance
+
+ void parse_args (int argc, char *argv[]);
+ // parses commandline arguments
+
+ char *hostname_;
+ // Hostname to connect to
+
+ u_short port_;
+ // Port number to use
+
+ char *filename_;
+ // Filename to upload/download
+
+ int length_;
+ // number of bytes to read/write
+
+ int offset_;
+ // offset to read/write
+
+ char operation_;
+ // "r" means download (read), and "w" means upload (write).
+
+ int debug_;
+ // turns on verbosity
+
+protected:
+ Options (void);
+ // protected constructor, singleton
+
+ static Options *instance_;
+ // the singleton
+};
+
+#endif /* ACE_BLOBBY_OPTIONS_H */
diff --git a/apps/JAWS/clients/Blobby/README b/apps/JAWS/clients/Blobby/README
new file mode 100644
index 00000000000..1a1cadf91ca
--- /dev/null
+++ b/apps/JAWS/clients/Blobby/README
@@ -0,0 +1,33 @@
+README for blobby, the example application for JAWS
+---------------------------------------------------
+
+Blobby is a simple application written using the ACE_Blob class, which
+is capable of doing both file uploads and downloads from the JAWS
+server.
+
+If a file is downloaded, the downloaded data is sent to standard
+output, so that it can be piped as necessary.
+
+It is an ACE application, and should be compiled exactly like any
+other ACE application.
+
+It accepts the following command line arguments:
+
+
+ -r Read (download) the file from the server
+ -w Write (upload) the file to the server
+ (Default is Read file)
+
+ -h hostname Use the server running on hostname
+ (Default is localhost)
+
+ -p port Port number of the server
+ (Default is 80)
+
+ -f filename The file to upload/download from the server
+
+ -l length The number of bytes to read/write from the server
+ -o offset The offset into the file to be read/written
+
+ -d Puts blobby into debug mode, where it echoes
+ its command line arguments
diff --git a/apps/JAWS/clients/Blobby/blobby.cpp b/apps/JAWS/clients/Blobby/blobby.cpp
new file mode 100644
index 00000000000..20a2e1b8e98
--- /dev/null
+++ b/apps/JAWS/clients/Blobby/blobby.cpp
@@ -0,0 +1,97 @@
+/* -*- C++ -*- */
+// $Id$
+
+//============================================================================
+//
+// = LIBRARY
+// JAWS
+//
+// = FILENAME
+// blobby.c
+//
+// = DESCRIPTION
+// Simple client application to illustrate the use of the ACE_Blob class
+//
+// It reads "length" number of bytes, after skipping offset "offset"
+// from hostname, port and filename as specified. (if -r specified)
+//
+// It writes "length" number of bytes, after skipping offset "offset"
+// to hostname, port and filename as specified (if -w specified)
+//
+// = AUTHOR
+// Prashant Jain and Sumedh Mungee
+//
+//============================================================================
+
+#include "Options.h"
+
+int
+main (int argc, char *argv[])
+{
+ // Options is a singleton
+ Options *options = Options::instance ();
+ options->parse_args (argc, argv);
+
+ // Explain what is going to happen
+ if (options->debug_)
+ ACE_DEBUG ((LM_DEBUG,
+ "hostname = %s, port = %d, filename = %s, length = %d, offset = %d, operation = %c\n",
+ options->hostname_,
+ options->port_,
+ options->filename_,
+ options->length_,
+ options->offset_,
+ options->operation_));
+
+ // Create a blob
+ ACE_Blob blob;
+
+ // User requested a read
+ if (options->operation_ == 'r')
+ {
+ ACE_Message_Block mb (0, options->length_);
+
+ // Open the blob
+ if (blob.open (options->filename_, options->hostname_, options->port_) == -1)
+ ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "open error"), -1);
+
+ // Read from it
+ if (blob.read (&mb, options->length_, options->offset_) == -1)
+ ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "read error"), -1);
+
+ // Write to STDOUT
+ if (ACE_OS::write (ACE_STDOUT, mb.rd_ptr(), mb.length()) == -1)
+ ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "write error"), -1);
+ }
+ else
+ {
+ int total = options->length_ + options->offset_;
+ ACE_Message_Block mb (total);
+
+ // Open the file to be sent
+ ACE_HANDLE h = ACE_OS::open (options->filename_, O_RDONLY);
+ if (h == ACE_INVALID_HANDLE)
+ ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "file open error"), -1);
+
+ // Open the blob
+ if (blob.open (options->filename_, options->hostname_, options->port_) == -1)
+ ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "connection open error"), -1);
+
+ // Read from the file
+ if (ACE_OS::read (h, mb.wr_ptr (), total) != total)
+ ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "file read error"), -1);
+
+ // Close the file
+ ACE_OS::close (h);
+
+ // Adjust the offset
+ mb.wr_ptr (mb.size ());
+
+ // Write to the blob
+ if (blob.write (&mb, options->length_, options->offset_) == -1)
+ ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "network write error"), -1);
+ }
+
+ blob.close ();
+ return 0;
+}
diff --git a/apps/JAWS/clients/Blobby/blobby.mak b/apps/JAWS/clients/Blobby/blobby.mak
new file mode 100644
index 00000000000..20166f992bb
--- /dev/null
+++ b/apps/JAWS/clients/Blobby/blobby.mak
@@ -0,0 +1,694 @@
+# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+!IF "$(CFG)" == ""
+CFG=blobby - Win32 Debug
+!MESSAGE No configuration specified. Defaulting to blobby - Win32 Debug.
+!ENDIF
+
+!IF "$(CFG)" != "blobby - Win32 Release" && "$(CFG)" != "blobby - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE on this makefile
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "blobby.mak" CFG="blobby - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "blobby - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "blobby - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+!ERROR An invalid configuration is specified.
+!ENDIF
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+################################################################################
+# Begin Project
+# PROP Target_Last_Scanned "blobby - Win32 Debug"
+RSC=rc.exe
+CPP=cl.exe
+
+!IF "$(CFG)" == "blobby - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "."
+# PROP Intermediate_Dir "Release"
+# PROP Target_Dir ""
+OUTDIR=.\.
+INTDIR=.\Release
+
+ALL : "$(OUTDIR)\blobby.exe"
+
+CLEAN :
+ -@erase "$(INTDIR)\Blob.obj"
+ -@erase "$(INTDIR)\Blob_Handler.obj"
+ -@erase "$(INTDIR)\blobby.obj"
+ -@erase "$(INTDIR)\blobby_options.obj"
+ -@erase "$(OUTDIR)\blobby.exe"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+"$(INTDIR)" :
+ if not exist "$(INTDIR)/$(NULL)" mkdir "$(INTDIR)"
+
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c
+# ADD CPP /nologo /MDd /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c
+CPP_PROJ=/nologo /MDd /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE"\
+ /Fp"$(INTDIR)/blobby.pch" /YX /Fo"$(INTDIR)/" /c
+CPP_OBJS=.\Release/
+CPP_SBRS=.\.
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+BSC32_FLAGS=/nologo /o"$(OUTDIR)/blobby.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 ace.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+LINK32_FLAGS=ace.lib kernel32.lib user32.lib gdi32.lib winspool.lib\
+ comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib\
+ odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no\
+ /pdb:"$(OUTDIR)/blobby.pdb" /machine:I386 /out:"$(OUTDIR)/blobby.exe"
+LINK32_OBJS= \
+ "$(INTDIR)\Blob.obj" \
+ "$(INTDIR)\Blob_Handler.obj" \
+ "$(INTDIR)\blobby.obj" \
+ "$(INTDIR)\blobby_options.obj"
+
+"$(OUTDIR)\blobby.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ELSEIF "$(CFG)" == "blobby - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "."
+# PROP Intermediate_Dir "Debug"
+# PROP Target_Dir ""
+OUTDIR=.\.
+INTDIR=.\Debug
+
+ALL : "$(OUTDIR)\blobby.exe"
+
+CLEAN :
+ -@erase "$(INTDIR)\Blob.obj"
+ -@erase "$(INTDIR)\Blob_Handler.obj"
+ -@erase "$(INTDIR)\blobby.obj"
+ -@erase "$(INTDIR)\blobby_options.obj"
+ -@erase "$(INTDIR)\vc40.idb"
+ -@erase "$(INTDIR)\vc40.pdb"
+ -@erase "$(OUTDIR)\blobby.exe"
+ -@erase "$(OUTDIR)\blobby.ilk"
+ -@erase "$(OUTDIR)\blobby.pdb"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+"$(INTDIR)" :
+ if not exist "$(INTDIR)/$(NULL)" mkdir "$(INTDIR)"
+
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /c
+CPP_PROJ=/nologo /MDd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE"\
+ /Fp"$(INTDIR)/blobby.pch" /YX /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c
+CPP_OBJS=.\Debug/
+CPP_SBRS=.\.
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+BSC32_FLAGS=/nologo /o"$(OUTDIR)/blobby.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386
+# ADD LINK32 ace.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386
+LINK32_FLAGS=ace.lib kernel32.lib user32.lib gdi32.lib winspool.lib\
+ comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib\
+ odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:yes\
+ /pdb:"$(OUTDIR)/blobby.pdb" /debug /machine:I386 /out:"$(OUTDIR)/blobby.exe"
+LINK32_OBJS= \
+ "$(INTDIR)\Blob.obj" \
+ "$(INTDIR)\Blob_Handler.obj" \
+ "$(INTDIR)\blobby.obj" \
+ "$(INTDIR)\blobby_options.obj"
+
+"$(OUTDIR)\blobby.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ENDIF
+
+.c{$(CPP_OBJS)}.obj:
+ $(CPP) $(CPP_PROJ) $<
+
+.cpp{$(CPP_OBJS)}.obj:
+ $(CPP) $(CPP_PROJ) $<
+
+.cxx{$(CPP_OBJS)}.obj:
+ $(CPP) $(CPP_PROJ) $<
+
+.c{$(CPP_SBRS)}.sbr:
+ $(CPP) $(CPP_PROJ) $<
+
+.cpp{$(CPP_SBRS)}.sbr:
+ $(CPP) $(CPP_PROJ) $<
+
+.cxx{$(CPP_SBRS)}.sbr:
+ $(CPP) $(CPP_PROJ) $<
+
+################################################################################
+# Begin Target
+
+# Name "blobby - Win32 Release"
+# Name "blobby - Win32 Debug"
+
+!IF "$(CFG)" == "blobby - Win32 Release"
+
+!ELSEIF "$(CFG)" == "blobby - Win32 Debug"
+
+!ENDIF
+
+################################################################################
+# Begin Source File
+
+SOURCE=.\blobby.cpp
+DEP_CPP_BLOBB=\
+ ".\Blob.h"\
+ ".\Blob_Handler.h"\
+ ".\blobby_options.h"\
+ {$(INCLUDE)}"\ace\ACE.h"\
+ {$(INCLUDE)}"\ace\ACE.i"\
+ {$(INCLUDE)}"\ace\Addr.h"\
+ {$(INCLUDE)}"\ace\Addr.i"\
+ {$(INCLUDE)}"\ace\ARGV.h"\
+ {$(INCLUDE)}"\ace\ARGV.i"\
+ {$(INCLUDE)}"\ace\Asynch_IO.h"\
+ {$(INCLUDE)}"\ace\Asynch_IO.i"\
+ {$(INCLUDE)}"\ace\config-win32-common.h"\
+ {$(INCLUDE)}"\ace\config.h"\
+ {$(INCLUDE)}"\ace\Connector.cpp"\
+ {$(INCLUDE)}"\ace\Connector.h"\
+ {$(INCLUDE)}"\ace\Connector.i"\
+ {$(INCLUDE)}"\ace\Dynamic.h"\
+ {$(INCLUDE)}"\ace\Dynamic.i"\
+ {$(INCLUDE)}"\ace\Event_Handler.h"\
+ {$(INCLUDE)}"\ace\Event_Handler.i"\
+ {$(INCLUDE)}"\ace\Get_Opt.h"\
+ {$(INCLUDE)}"\ace\Get_Opt.i"\
+ {$(INCLUDE)}"\ace\Handle_Set.h"\
+ {$(INCLUDE)}"\ace\Handle_Set.i"\
+ {$(INCLUDE)}"\ace\INET_Addr.h"\
+ {$(INCLUDE)}"\ace\INET_Addr.i"\
+ {$(INCLUDE)}"\ace\IO_Cntl_Msg.h"\
+ {$(INCLUDE)}"\ace\IPC_SAP.h"\
+ {$(INCLUDE)}"\ace\IPC_SAP.i"\
+ {$(INCLUDE)}"\ace\Local_Tokens.h"\
+ {$(INCLUDE)}"\ace\Local_Tokens.i"\
+ {$(INCLUDE)}"\ace\Log_Msg.h"\
+ {$(INCLUDE)}"\ace\Log_Priority.h"\
+ {$(INCLUDE)}"\ace\Log_Record.h"\
+ {$(INCLUDE)}"\ace\Log_Record.i"\
+ {$(INCLUDE)}"\ace\Malloc.h"\
+ {$(INCLUDE)}"\ace\Malloc.i"\
+ {$(INCLUDE)}"\ace\Malloc_T.cpp"\
+ {$(INCLUDE)}"\ace\Malloc_T.h"\
+ {$(INCLUDE)}"\ace\Malloc_T.i"\
+ {$(INCLUDE)}"\ace\Map_Manager.cpp"\
+ {$(INCLUDE)}"\ace\Map_Manager.h"\
+ {$(INCLUDE)}"\ace\Map_Manager.i"\
+ {$(INCLUDE)}"\ace\Mem_Map.h"\
+ {$(INCLUDE)}"\ace\Mem_Map.i"\
+ {$(INCLUDE)}"\ace\Memory_Pool.h"\
+ {$(INCLUDE)}"\ace\Memory_Pool.i"\
+ {$(INCLUDE)}"\ace\Message_Block.h"\
+ {$(INCLUDE)}"\ace\Message_Block.i"\
+ {$(INCLUDE)}"\ace\Message_Queue.cpp"\
+ {$(INCLUDE)}"\ace\Message_Queue.h"\
+ {$(INCLUDE)}"\ace\Message_Queue.i"\
+ {$(INCLUDE)}"\ace\Module.cpp"\
+ {$(INCLUDE)}"\ace\Module.h"\
+ {$(INCLUDE)}"\ace\Module.i"\
+ {$(INCLUDE)}"\ace\OS.h"\
+ {$(INCLUDE)}"\ace\OS.i"\
+ {$(INCLUDE)}"\ace\Pipe.h"\
+ {$(INCLUDE)}"\ace\Pipe.i"\
+ {$(INCLUDE)}"\ace\Proactor.h"\
+ {$(INCLUDE)}"\ace\Proactor.i"\
+ {$(INCLUDE)}"\ace\Reactor.h"\
+ {$(INCLUDE)}"\ace\Reactor.i"\
+ {$(INCLUDE)}"\ace\ReactorEx.h"\
+ {$(INCLUDE)}"\ace\ReactorEx.i"\
+ {$(INCLUDE)}"\ace\Service_Config.h"\
+ {$(INCLUDE)}"\ace\Service_Config.i"\
+ {$(INCLUDE)}"\ace\Service_Object.h"\
+ {$(INCLUDE)}"\ace\Service_Object.i"\
+ {$(INCLUDE)}"\ace\Set.cpp"\
+ {$(INCLUDE)}"\ace\Set.h"\
+ {$(INCLUDE)}"\ace\Set.i"\
+ {$(INCLUDE)}"\ace\Shared_Object.h"\
+ {$(INCLUDE)}"\ace\Shared_Object.i"\
+ {$(INCLUDE)}"\ace\Signal.h"\
+ {$(INCLUDE)}"\ace\Signal.i"\
+ {$(INCLUDE)}"\ace\SOCK.h"\
+ {$(INCLUDE)}"\ace\SOCK.i"\
+ {$(INCLUDE)}"\ace\SOCK_Connector.h"\
+ {$(INCLUDE)}"\ace\SOCK_Connector.i"\
+ {$(INCLUDE)}"\ace\SOCK_IO.h"\
+ {$(INCLUDE)}"\ace\SOCK_IO.i"\
+ {$(INCLUDE)}"\ace\SOCK_Stream.h"\
+ {$(INCLUDE)}"\ace\SOCK_Stream.i"\
+ {$(INCLUDE)}"\ace\SString.h"\
+ {$(INCLUDE)}"\ace\SString.i"\
+ {$(INCLUDE)}"\ace\Stack.cpp"\
+ {$(INCLUDE)}"\ace\Stack.h"\
+ {$(INCLUDE)}"\ace\Stack.i"\
+ {$(INCLUDE)}"\ace\stdcpp.h"\
+ {$(INCLUDE)}"\ace\Strategies.h"\
+ {$(INCLUDE)}"\ace\Strategies_T.cpp"\
+ {$(INCLUDE)}"\ace\Strategies_T.h"\
+ {$(INCLUDE)}"\ace\Stream_Modules.cpp"\
+ {$(INCLUDE)}"\ace\Stream_Modules.h"\
+ {$(INCLUDE)}"\ace\Stream_Modules.i"\
+ {$(INCLUDE)}"\ace\SV_Semaphore_Complex.h"\
+ {$(INCLUDE)}"\ace\SV_Semaphore_Complex.i"\
+ {$(INCLUDE)}"\ace\SV_Semaphore_Simple.h"\
+ {$(INCLUDE)}"\ace\SV_Semaphore_Simple.i"\
+ {$(INCLUDE)}"\ace\Svc_Conf_Tokens.h"\
+ {$(INCLUDE)}"\ace\Svc_Handler.cpp"\
+ {$(INCLUDE)}"\ace\Svc_Handler.h"\
+ {$(INCLUDE)}"\ace\Svc_Handler.i"\
+ {$(INCLUDE)}"\ace\Synch.h"\
+ {$(INCLUDE)}"\ace\Synch.i"\
+ {$(INCLUDE)}"\ace\Synch_Options.h"\
+ {$(INCLUDE)}"\ace\Synch_T.cpp"\
+ {$(INCLUDE)}"\ace\Synch_T.h"\
+ {$(INCLUDE)}"\ace\Synch_T.i"\
+ {$(INCLUDE)}"\ace\Task.h"\
+ {$(INCLUDE)}"\ace\Task.i"\
+ {$(INCLUDE)}"\ace\Task_T.cpp"\
+ {$(INCLUDE)}"\ace\Task_T.h"\
+ {$(INCLUDE)}"\ace\Task_T.i"\
+ {$(INCLUDE)}"\ace\Thread.h"\
+ {$(INCLUDE)}"\ace\Thread.i"\
+ {$(INCLUDE)}"\ace\Thread_Manager.h"\
+ {$(INCLUDE)}"\ace\Thread_Manager.i"\
+ {$(INCLUDE)}"\ace\Time_Value.h"\
+ {$(INCLUDE)}"\ace\Timer_Heap.h"\
+ {$(INCLUDE)}"\ace\Timer_Heap_T.cpp"\
+ {$(INCLUDE)}"\ace\Timer_Heap_T.h"\
+ {$(INCLUDE)}"\ace\Timer_List.h"\
+ {$(INCLUDE)}"\ace\Timer_List_T.cpp"\
+ {$(INCLUDE)}"\ace\Timer_List_T.h"\
+ {$(INCLUDE)}"\ace\Timer_Queue.h"\
+ {$(INCLUDE)}"\ace\Timer_Queue_T.cpp"\
+ {$(INCLUDE)}"\ace\Timer_Queue_T.h"\
+ {$(INCLUDE)}"\ace\Timer_Queue_T.i"\
+ {$(INCLUDE)}"\ace\Timer_Wheel.h"\
+ {$(INCLUDE)}"\ace\Timer_Wheel_T.cpp"\
+ {$(INCLUDE)}"\ace\Timer_Wheel_T.h"\
+ {$(INCLUDE)}"\ace\Token.h"\
+ {$(INCLUDE)}"\ace\Token.i"\
+ {$(INCLUDE)}"\ace\Trace.h"\
+ {$(INCLUDE)}"\ace\ws2tcpip.h"\
+
+
+"$(INTDIR)\blobby.obj" : $(SOURCE) $(DEP_CPP_BLOBB) "$(INTDIR)"
+
+
+# End Source File
+################################################################################
+# Begin Source File
+
+SOURCE=.\Blob_Handler.cpp
+
+!IF "$(CFG)" == "blobby - Win32 Release"
+
+DEP_CPP_BLOB_=\
+ ".\Blob_Handler.h"\
+ {$(INCLUDE)}"\ace\ACE.h"\
+ {$(INCLUDE)}"\ace\ACE.i"\
+ {$(INCLUDE)}"\ace\Addr.h"\
+ {$(INCLUDE)}"\ace\Addr.i"\
+ {$(INCLUDE)}"\ace\config-win32-common.h"\
+ {$(INCLUDE)}"\ace\config.h"\
+ {$(INCLUDE)}"\ace\INET_Addr.h"\
+ {$(INCLUDE)}"\ace\INET_Addr.i"\
+ {$(INCLUDE)}"\ace\Log_Msg.h"\
+ {$(INCLUDE)}"\ace\Log_Priority.h"\
+ {$(INCLUDE)}"\ace\Log_Record.h"\
+ {$(INCLUDE)}"\ace\Log_Record.i"\
+ {$(INCLUDE)}"\ace\OS.h"\
+ {$(INCLUDE)}"\ace\OS.i"\
+ {$(INCLUDE)}"\ace\stdcpp.h"\
+ {$(INCLUDE)}"\ace\Trace.h"\
+ {$(INCLUDE)}"\ace\ws2tcpip.h"\
+
+
+"$(INTDIR)\Blob_Handler.obj" : $(SOURCE) $(DEP_CPP_BLOB_) "$(INTDIR)"
+
+
+!ELSEIF "$(CFG)" == "blobby - Win32 Debug"
+
+DEP_CPP_BLOB_=\
+ ".\Blob_Handler.h"\
+ {$(INCLUDE)}"\ace\ACE.h"\
+ {$(INCLUDE)}"\ace\ACE.i"\
+ {$(INCLUDE)}"\ace\Addr.h"\
+ {$(INCLUDE)}"\ace\Addr.i"\
+ {$(INCLUDE)}"\ace\config-win32-common.h"\
+ {$(INCLUDE)}"\ace\config.h"\
+ {$(INCLUDE)}"\ace\INET_Addr.h"\
+ {$(INCLUDE)}"\ace\INET_Addr.i"\
+ {$(INCLUDE)}"\ace\OS.h"\
+ {$(INCLUDE)}"\ace\OS.i"\
+ {$(INCLUDE)}"\ace\stdcpp.h"\
+ {$(INCLUDE)}"\ace\Svc_Handler.h"\
+ {$(INCLUDE)}"\ace\ws2tcpip.h"\
+
+
+"$(INTDIR)\Blob_Handler.obj" : $(SOURCE) $(DEP_CPP_BLOB_) "$(INTDIR)"
+
+
+!ENDIF
+
+# End Source File
+################################################################################
+# Begin Source File
+
+SOURCE=.\Blob.cpp
+DEP_CPP_BLOB_C=\
+ ".\Blob.h"\
+ ".\Blob_Handler.h"\
+ {$(INCLUDE)}"\ace\ACE.h"\
+ {$(INCLUDE)}"\ace\ACE.i"\
+ {$(INCLUDE)}"\ace\Addr.h"\
+ {$(INCLUDE)}"\ace\Addr.i"\
+ {$(INCLUDE)}"\ace\Asynch_IO.h"\
+ {$(INCLUDE)}"\ace\Asynch_IO.i"\
+ {$(INCLUDE)}"\ace\config-win32-common.h"\
+ {$(INCLUDE)}"\ace\config.h"\
+ {$(INCLUDE)}"\ace\Connector.cpp"\
+ {$(INCLUDE)}"\ace\Connector.h"\
+ {$(INCLUDE)}"\ace\Connector.i"\
+ {$(INCLUDE)}"\ace\Dynamic.h"\
+ {$(INCLUDE)}"\ace\Dynamic.i"\
+ {$(INCLUDE)}"\ace\Event_Handler.h"\
+ {$(INCLUDE)}"\ace\Event_Handler.i"\
+ {$(INCLUDE)}"\ace\Handle_Set.h"\
+ {$(INCLUDE)}"\ace\Handle_Set.i"\
+ {$(INCLUDE)}"\ace\INET_Addr.h"\
+ {$(INCLUDE)}"\ace\INET_Addr.i"\
+ {$(INCLUDE)}"\ace\IO_Cntl_Msg.h"\
+ {$(INCLUDE)}"\ace\IPC_SAP.h"\
+ {$(INCLUDE)}"\ace\IPC_SAP.i"\
+ {$(INCLUDE)}"\ace\Local_Tokens.h"\
+ {$(INCLUDE)}"\ace\Local_Tokens.i"\
+ {$(INCLUDE)}"\ace\Log_Msg.h"\
+ {$(INCLUDE)}"\ace\Log_Priority.h"\
+ {$(INCLUDE)}"\ace\Log_Record.h"\
+ {$(INCLUDE)}"\ace\Log_Record.i"\
+ {$(INCLUDE)}"\ace\Malloc.h"\
+ {$(INCLUDE)}"\ace\Malloc.i"\
+ {$(INCLUDE)}"\ace\Malloc_T.cpp"\
+ {$(INCLUDE)}"\ace\Malloc_T.h"\
+ {$(INCLUDE)}"\ace\Malloc_T.i"\
+ {$(INCLUDE)}"\ace\Map_Manager.cpp"\
+ {$(INCLUDE)}"\ace\Map_Manager.h"\
+ {$(INCLUDE)}"\ace\Map_Manager.i"\
+ {$(INCLUDE)}"\ace\Mem_Map.h"\
+ {$(INCLUDE)}"\ace\Mem_Map.i"\
+ {$(INCLUDE)}"\ace\Memory_Pool.h"\
+ {$(INCLUDE)}"\ace\Memory_Pool.i"\
+ {$(INCLUDE)}"\ace\Message_Block.h"\
+ {$(INCLUDE)}"\ace\Message_Block.i"\
+ {$(INCLUDE)}"\ace\Message_Queue.cpp"\
+ {$(INCLUDE)}"\ace\Message_Queue.h"\
+ {$(INCLUDE)}"\ace\Message_Queue.i"\
+ {$(INCLUDE)}"\ace\Module.cpp"\
+ {$(INCLUDE)}"\ace\Module.h"\
+ {$(INCLUDE)}"\ace\Module.i"\
+ {$(INCLUDE)}"\ace\OS.h"\
+ {$(INCLUDE)}"\ace\OS.i"\
+ {$(INCLUDE)}"\ace\Pipe.h"\
+ {$(INCLUDE)}"\ace\Pipe.i"\
+ {$(INCLUDE)}"\ace\Proactor.h"\
+ {$(INCLUDE)}"\ace\Proactor.i"\
+ {$(INCLUDE)}"\ace\Reactor.h"\
+ {$(INCLUDE)}"\ace\Reactor.i"\
+ {$(INCLUDE)}"\ace\ReactorEx.h"\
+ {$(INCLUDE)}"\ace\ReactorEx.i"\
+ {$(INCLUDE)}"\ace\Service_Config.h"\
+ {$(INCLUDE)}"\ace\Service_Config.i"\
+ {$(INCLUDE)}"\ace\Service_Object.h"\
+ {$(INCLUDE)}"\ace\Service_Object.i"\
+ {$(INCLUDE)}"\ace\Set.cpp"\
+ {$(INCLUDE)}"\ace\Set.h"\
+ {$(INCLUDE)}"\ace\Set.i"\
+ {$(INCLUDE)}"\ace\Shared_Object.h"\
+ {$(INCLUDE)}"\ace\Shared_Object.i"\
+ {$(INCLUDE)}"\ace\Signal.h"\
+ {$(INCLUDE)}"\ace\Signal.i"\
+ {$(INCLUDE)}"\ace\SOCK.h"\
+ {$(INCLUDE)}"\ace\SOCK.i"\
+ {$(INCLUDE)}"\ace\SOCK_Connector.h"\
+ {$(INCLUDE)}"\ace\SOCK_Connector.i"\
+ {$(INCLUDE)}"\ace\SOCK_IO.h"\
+ {$(INCLUDE)}"\ace\SOCK_IO.i"\
+ {$(INCLUDE)}"\ace\SOCK_Stream.h"\
+ {$(INCLUDE)}"\ace\SOCK_Stream.i"\
+ {$(INCLUDE)}"\ace\SString.h"\
+ {$(INCLUDE)}"\ace\SString.i"\
+ {$(INCLUDE)}"\ace\Stack.cpp"\
+ {$(INCLUDE)}"\ace\Stack.h"\
+ {$(INCLUDE)}"\ace\Stack.i"\
+ {$(INCLUDE)}"\ace\stdcpp.h"\
+ {$(INCLUDE)}"\ace\Strategies.h"\
+ {$(INCLUDE)}"\ace\Strategies_T.cpp"\
+ {$(INCLUDE)}"\ace\Strategies_T.h"\
+ {$(INCLUDE)}"\ace\Stream_Modules.cpp"\
+ {$(INCLUDE)}"\ace\Stream_Modules.h"\
+ {$(INCLUDE)}"\ace\Stream_Modules.i"\
+ {$(INCLUDE)}"\ace\SV_Semaphore_Complex.h"\
+ {$(INCLUDE)}"\ace\SV_Semaphore_Complex.i"\
+ {$(INCLUDE)}"\ace\SV_Semaphore_Simple.h"\
+ {$(INCLUDE)}"\ace\SV_Semaphore_Simple.i"\
+ {$(INCLUDE)}"\ace\Svc_Conf_Tokens.h"\
+ {$(INCLUDE)}"\ace\Svc_Handler.cpp"\
+ {$(INCLUDE)}"\ace\Svc_Handler.h"\
+ {$(INCLUDE)}"\ace\Svc_Handler.i"\
+ {$(INCLUDE)}"\ace\Synch.h"\
+ {$(INCLUDE)}"\ace\Synch.i"\
+ {$(INCLUDE)}"\ace\Synch_Options.h"\
+ {$(INCLUDE)}"\ace\Synch_T.cpp"\
+ {$(INCLUDE)}"\ace\Synch_T.h"\
+ {$(INCLUDE)}"\ace\Synch_T.i"\
+ {$(INCLUDE)}"\ace\Task.h"\
+ {$(INCLUDE)}"\ace\Task.i"\
+ {$(INCLUDE)}"\ace\Task_T.cpp"\
+ {$(INCLUDE)}"\ace\Task_T.h"\
+ {$(INCLUDE)}"\ace\Task_T.i"\
+ {$(INCLUDE)}"\ace\Thread.h"\
+ {$(INCLUDE)}"\ace\Thread.i"\
+ {$(INCLUDE)}"\ace\Thread_Manager.h"\
+ {$(INCLUDE)}"\ace\Thread_Manager.i"\
+ {$(INCLUDE)}"\ace\Time_Value.h"\
+ {$(INCLUDE)}"\ace\Timer_Heap.h"\
+ {$(INCLUDE)}"\ace\Timer_Heap_T.cpp"\
+ {$(INCLUDE)}"\ace\Timer_Heap_T.h"\
+ {$(INCLUDE)}"\ace\Timer_List.h"\
+ {$(INCLUDE)}"\ace\Timer_List_T.cpp"\
+ {$(INCLUDE)}"\ace\Timer_List_T.h"\
+ {$(INCLUDE)}"\ace\Timer_Queue.h"\
+ {$(INCLUDE)}"\ace\Timer_Queue_T.cpp"\
+ {$(INCLUDE)}"\ace\Timer_Queue_T.h"\
+ {$(INCLUDE)}"\ace\Timer_Queue_T.i"\
+ {$(INCLUDE)}"\ace\Timer_Wheel.h"\
+ {$(INCLUDE)}"\ace\Timer_Wheel_T.cpp"\
+ {$(INCLUDE)}"\ace\Timer_Wheel_T.h"\
+ {$(INCLUDE)}"\ace\Token.h"\
+ {$(INCLUDE)}"\ace\Token.i"\
+ {$(INCLUDE)}"\ace\Trace.h"\
+ {$(INCLUDE)}"\ace\ws2tcpip.h"\
+
+
+"$(INTDIR)\Blob.obj" : $(SOURCE) $(DEP_CPP_BLOB_C) "$(INTDIR)"
+
+
+# End Source File
+################################################################################
+# Begin Source File
+
+SOURCE=.\blobby_options.cpp
+DEP_CPP_BLOBBY=\
+ ".\Blob.h"\
+ ".\Blob_Handler.h"\
+ ".\blobby_options.h"\
+ {$(INCLUDE)}"\ace\ACE.h"\
+ {$(INCLUDE)}"\ace\ACE.i"\
+ {$(INCLUDE)}"\ace\Addr.h"\
+ {$(INCLUDE)}"\ace\Addr.i"\
+ {$(INCLUDE)}"\ace\ARGV.h"\
+ {$(INCLUDE)}"\ace\ARGV.i"\
+ {$(INCLUDE)}"\ace\Asynch_IO.h"\
+ {$(INCLUDE)}"\ace\Asynch_IO.i"\
+ {$(INCLUDE)}"\ace\config-win32-common.h"\
+ {$(INCLUDE)}"\ace\config.h"\
+ {$(INCLUDE)}"\ace\Connector.cpp"\
+ {$(INCLUDE)}"\ace\Connector.h"\
+ {$(INCLUDE)}"\ace\Connector.i"\
+ {$(INCLUDE)}"\ace\Dynamic.h"\
+ {$(INCLUDE)}"\ace\Dynamic.i"\
+ {$(INCLUDE)}"\ace\Event_Handler.h"\
+ {$(INCLUDE)}"\ace\Event_Handler.i"\
+ {$(INCLUDE)}"\ace\Get_Opt.h"\
+ {$(INCLUDE)}"\ace\Get_Opt.i"\
+ {$(INCLUDE)}"\ace\Handle_Set.h"\
+ {$(INCLUDE)}"\ace\Handle_Set.i"\
+ {$(INCLUDE)}"\ace\INET_Addr.h"\
+ {$(INCLUDE)}"\ace\INET_Addr.i"\
+ {$(INCLUDE)}"\ace\IO_Cntl_Msg.h"\
+ {$(INCLUDE)}"\ace\IPC_SAP.h"\
+ {$(INCLUDE)}"\ace\IPC_SAP.i"\
+ {$(INCLUDE)}"\ace\Local_Tokens.h"\
+ {$(INCLUDE)}"\ace\Local_Tokens.i"\
+ {$(INCLUDE)}"\ace\Log_Msg.h"\
+ {$(INCLUDE)}"\ace\Log_Priority.h"\
+ {$(INCLUDE)}"\ace\Log_Record.h"\
+ {$(INCLUDE)}"\ace\Log_Record.i"\
+ {$(INCLUDE)}"\ace\Malloc.h"\
+ {$(INCLUDE)}"\ace\Malloc.i"\
+ {$(INCLUDE)}"\ace\Malloc_T.cpp"\
+ {$(INCLUDE)}"\ace\Malloc_T.h"\
+ {$(INCLUDE)}"\ace\Malloc_T.i"\
+ {$(INCLUDE)}"\ace\Map_Manager.cpp"\
+ {$(INCLUDE)}"\ace\Map_Manager.h"\
+ {$(INCLUDE)}"\ace\Map_Manager.i"\
+ {$(INCLUDE)}"\ace\Mem_Map.h"\
+ {$(INCLUDE)}"\ace\Mem_Map.i"\
+ {$(INCLUDE)}"\ace\Memory_Pool.h"\
+ {$(INCLUDE)}"\ace\Memory_Pool.i"\
+ {$(INCLUDE)}"\ace\Message_Block.h"\
+ {$(INCLUDE)}"\ace\Message_Block.i"\
+ {$(INCLUDE)}"\ace\Message_Queue.cpp"\
+ {$(INCLUDE)}"\ace\Message_Queue.h"\
+ {$(INCLUDE)}"\ace\Message_Queue.i"\
+ {$(INCLUDE)}"\ace\Module.cpp"\
+ {$(INCLUDE)}"\ace\Module.h"\
+ {$(INCLUDE)}"\ace\Module.i"\
+ {$(INCLUDE)}"\ace\OS.h"\
+ {$(INCLUDE)}"\ace\OS.i"\
+ {$(INCLUDE)}"\ace\Pipe.h"\
+ {$(INCLUDE)}"\ace\Pipe.i"\
+ {$(INCLUDE)}"\ace\Proactor.h"\
+ {$(INCLUDE)}"\ace\Proactor.i"\
+ {$(INCLUDE)}"\ace\Reactor.h"\
+ {$(INCLUDE)}"\ace\Reactor.i"\
+ {$(INCLUDE)}"\ace\ReactorEx.h"\
+ {$(INCLUDE)}"\ace\ReactorEx.i"\
+ {$(INCLUDE)}"\ace\Service_Config.h"\
+ {$(INCLUDE)}"\ace\Service_Config.i"\
+ {$(INCLUDE)}"\ace\Service_Object.h"\
+ {$(INCLUDE)}"\ace\Service_Object.i"\
+ {$(INCLUDE)}"\ace\Set.cpp"\
+ {$(INCLUDE)}"\ace\Set.h"\
+ {$(INCLUDE)}"\ace\Set.i"\
+ {$(INCLUDE)}"\ace\Shared_Object.h"\
+ {$(INCLUDE)}"\ace\Shared_Object.i"\
+ {$(INCLUDE)}"\ace\Signal.h"\
+ {$(INCLUDE)}"\ace\Signal.i"\
+ {$(INCLUDE)}"\ace\SOCK.h"\
+ {$(INCLUDE)}"\ace\SOCK.i"\
+ {$(INCLUDE)}"\ace\SOCK_Connector.h"\
+ {$(INCLUDE)}"\ace\SOCK_Connector.i"\
+ {$(INCLUDE)}"\ace\SOCK_IO.h"\
+ {$(INCLUDE)}"\ace\SOCK_IO.i"\
+ {$(INCLUDE)}"\ace\SOCK_Stream.h"\
+ {$(INCLUDE)}"\ace\SOCK_Stream.i"\
+ {$(INCLUDE)}"\ace\SString.h"\
+ {$(INCLUDE)}"\ace\SString.i"\
+ {$(INCLUDE)}"\ace\Stack.cpp"\
+ {$(INCLUDE)}"\ace\Stack.h"\
+ {$(INCLUDE)}"\ace\Stack.i"\
+ {$(INCLUDE)}"\ace\stdcpp.h"\
+ {$(INCLUDE)}"\ace\Strategies.h"\
+ {$(INCLUDE)}"\ace\Strategies_T.cpp"\
+ {$(INCLUDE)}"\ace\Strategies_T.h"\
+ {$(INCLUDE)}"\ace\Stream_Modules.cpp"\
+ {$(INCLUDE)}"\ace\Stream_Modules.h"\
+ {$(INCLUDE)}"\ace\Stream_Modules.i"\
+ {$(INCLUDE)}"\ace\SV_Semaphore_Complex.h"\
+ {$(INCLUDE)}"\ace\SV_Semaphore_Complex.i"\
+ {$(INCLUDE)}"\ace\SV_Semaphore_Simple.h"\
+ {$(INCLUDE)}"\ace\SV_Semaphore_Simple.i"\
+ {$(INCLUDE)}"\ace\Svc_Conf_Tokens.h"\
+ {$(INCLUDE)}"\ace\Svc_Handler.cpp"\
+ {$(INCLUDE)}"\ace\Svc_Handler.h"\
+ {$(INCLUDE)}"\ace\Svc_Handler.i"\
+ {$(INCLUDE)}"\ace\Synch.h"\
+ {$(INCLUDE)}"\ace\Synch.i"\
+ {$(INCLUDE)}"\ace\Synch_Options.h"\
+ {$(INCLUDE)}"\ace\Synch_T.cpp"\
+ {$(INCLUDE)}"\ace\Synch_T.h"\
+ {$(INCLUDE)}"\ace\Synch_T.i"\
+ {$(INCLUDE)}"\ace\Task.h"\
+ {$(INCLUDE)}"\ace\Task.i"\
+ {$(INCLUDE)}"\ace\Task_T.cpp"\
+ {$(INCLUDE)}"\ace\Task_T.h"\
+ {$(INCLUDE)}"\ace\Task_T.i"\
+ {$(INCLUDE)}"\ace\Thread.h"\
+ {$(INCLUDE)}"\ace\Thread.i"\
+ {$(INCLUDE)}"\ace\Thread_Manager.h"\
+ {$(INCLUDE)}"\ace\Thread_Manager.i"\
+ {$(INCLUDE)}"\ace\Time_Value.h"\
+ {$(INCLUDE)}"\ace\Timer_Heap.h"\
+ {$(INCLUDE)}"\ace\Timer_Heap_T.cpp"\
+ {$(INCLUDE)}"\ace\Timer_Heap_T.h"\
+ {$(INCLUDE)}"\ace\Timer_List.h"\
+ {$(INCLUDE)}"\ace\Timer_List_T.cpp"\
+ {$(INCLUDE)}"\ace\Timer_List_T.h"\
+ {$(INCLUDE)}"\ace\Timer_Queue.h"\
+ {$(INCLUDE)}"\ace\Timer_Queue_T.cpp"\
+ {$(INCLUDE)}"\ace\Timer_Queue_T.h"\
+ {$(INCLUDE)}"\ace\Timer_Queue_T.i"\
+ {$(INCLUDE)}"\ace\Timer_Wheel.h"\
+ {$(INCLUDE)}"\ace\Timer_Wheel_T.cpp"\
+ {$(INCLUDE)}"\ace\Timer_Wheel_T.h"\
+ {$(INCLUDE)}"\ace\Token.h"\
+ {$(INCLUDE)}"\ace\Token.i"\
+ {$(INCLUDE)}"\ace\Trace.h"\
+ {$(INCLUDE)}"\ace\ws2tcpip.h"\
+
+
+"$(INTDIR)\blobby_options.obj" : $(SOURCE) $(DEP_CPP_BLOBBY) "$(INTDIR)"
+
+
+# End Source File
+# End Target
+# End Project
+################################################################################
diff --git a/apps/JAWS/clients/Blobby/blobby.mdp b/apps/JAWS/clients/Blobby/blobby.mdp
new file mode 100644
index 00000000000..23c01c58985
--- /dev/null
+++ b/apps/JAWS/clients/Blobby/blobby.mdp
Binary files differ