Boost logo

Boost-Commit :

From: lists.drrngrvy_at_[hidden]
Date: 2007-10-17 16:10:42


Author: drrngrvy
Date: 2007-10-17 16:10:39 EDT (Wed, 17 Oct 2007)
New Revision: 40134
URL: http://svn.boost.org/trac/boost/changeset/40134

Log:
Added a basic_client class, that is a level between a request and the connection associated with it, which controls the input and output formatting and scheduling. For instance, in the case of FastCGI - at least as is planned at the time of writing - it is the client which is responsible for wrapping a buffer in the protocol-specific way; it must also ensure that a client holds a connection until it has sent each packet fully. In other words, so a shared connection doesn't steal the connection between a couple of read/write_some`s and break the output (which would essentially compromise safety quite significantly - if output from different sessions is interleaved).

Also added a shareable_tcp_socket which has a boost::mutex and boost::condition to simplify mutiplexing.
Added:
   sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/basic_client.hpp (contents, props changed)
   sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/connections/shareable_tcp_socket.hpp (contents, props changed)
   sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/scgi/client.hpp (contents, props changed)
   sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/scgi/scgi.hpp (contents, props changed)
Text files modified:
   sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/basic_protocol_service.hpp | 6
   sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/basic_request_acceptor.hpp | 44 +++++++-
   sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/cgi/cgi_service.hpp | 12 +-
   sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/connections/tcp_socket.hpp | 23 +--
   sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/io_service_provider.hpp | 2
   sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/scgi/acceptor_service_impl.hpp | 113 ++++++++++++++++------
   sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/scgi/request.hpp | 8 +
   sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/scgi/request_acceptor_service.hpp | 24 +--
   sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/scgi/request_impl.hpp | 14 +-
   sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/scgi/request_service.hpp | 17 +-
   sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/scgi/service.hpp | 12 +
   sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/scgi/service_impl.hpp | 205 +--------------------------------------
   sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/tags.hpp | 2
   sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/libs/cgi/website/about.html | 2
   sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/libs/cgi/website/bugs.html | 2
   sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/libs/cgi/website/cgi.css | 5
   sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/libs/cgi/website/contact.html | 4
   sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/libs/cgi/website/credits.html | 79 ++++++---------
   sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/libs/cgi/website/downloads.html | 2
   sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/libs/cgi/website/index.html | 9 +
   sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/libs/cgi/website/license.html | 2
   sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/libs/cgi/website/release_notes.html | 2
   sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/libs/cgi/website/source.html | 2
   sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/libs/cgi/website/status.html | 3
   24 files changed, 242 insertions(+), 352 deletions(-)

Added: sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/basic_client.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/basic_client.hpp 2007-10-17 16:10:39 EDT (Wed, 17 Oct 2007)
@@ -0,0 +1,107 @@
+// -- basic_client.hpp --
+//
+// Copyright (c) Darren Garvey 2007.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+////////////////////////////////////////////////////////////////
+#ifndef CGI_BASIC_CLIENT_HPP_INCLUDED__
+#define CGI_BASIC_CLIENT_HPP_INCLUDED__
+
+#include <boost/shared_ptr.hpp>
+
+#include "boost/cgi/map.hpp"
+#include "boost/cgi/role_type.hpp"
+#include "boost/cgi/status_type.hpp"
+#include "boost/cgi/http/status_code.hpp"
+#include "boost/cgi/connections/tcp_socket.hpp"
+
+namespace cgi {
+
+ /// A client
+ /**
+ * A client is for two things:
+ * 1. To hold a full-duplex connection (or separate input and output
+ * connections).
+ * 2. To hold any protocol-specific data about the request. For now,
+ * this means the internal 'request number' associated by FastCGI
+ * with each request (ie. so incoming/outgoing packets can be wrapped
+ * with data noting what request it relates to).
+ * 3. Buffering. Not sure about how far this should go yet, but probably
+ * no further than minimal buffering.
+ * 4. Share a connection. Since a multiplexing connection is shared between
+ * multiple clients, the client should be responsible for taking possesion
+ * of the connection for a period of time (so it can write a complete
+ * packet). This idea could be taken quite far into genericity by making
+ * clients aware of how busy the connection is and size its output packets
+ * accordingly... But I'm not doing that.
+ */
+ template<typename Connection>
+ class basic_client
+ {
+ public:
+ typedef cgi::map map_type;
+ typedef Protocol protocol_type;
+ typedef Connection connection_type;
+ typedef typename connection_type::pointer connection_ptr;
+
+ basic_client(cgi::io_service& ios)
+ : io_service_(ios)
+ {
+ }
+
+ io_service& io_service() { return io_service_; }
+
+ /// Associate a connection with this client
+ /**
+ * Note: the connection must have been created using the new operator
+ */
+ bool set_connection(connection_type* conn)
+ {
+ // make sure there isn't already a connection associated with the client
+ if (!connection_) return false;
+ connection_.reset(conn);
+ return true;
+ }
+
+ /// Get a shared_ptr of the connection associated with the client.
+ connection_ptr& connection() { return connection_; }
+
+ /// Write some data to the client.
+ template<typename ConstBufferSequence>
+ std::size_t write_some(const ConstBufferSequence& buf
+ , boost::system::error_code& ec)
+ {
+ return connection_->write_some(buf, ec);
+ }
+
+ /// Read some data from the client.
+ template<typename MutableBufferSequence>
+ std::size_t read_some(const MutableBufferSequence& buf
+ , boost::system::error_code& ec)
+ {
+ return connection_->read_some(buf, ec);
+ }
+
+ /// Asynchronously write some data to the client.
+ template<typename ConstBufferSequence, typename Handler>
+ void async_write_some(const ConstBufferSequence& buf, Handler handler)
+ {
+ connection_->async_write_some(buf, handler);
+ }
+
+ /// Asynchronously read some data from the client.
+ template<typename MutableBufferSequence, typename Handler>
+ void async_read_some(const MutableBufferSequence& buf, Handler handler)
+ {
+ connection_->async_read_some(buf, handler);
+ }
+ private:
+ io_service& io_service_;
+ connection_ptr connection_;
+ };
+
+} // namespace cgi
+
+#endif // CGI_BASIC_CLIENT_HPP_INCLUDED__

Modified: sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/basic_protocol_service.hpp
==============================================================================
--- sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/basic_protocol_service.hpp (original)
+++ sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/basic_protocol_service.hpp 2007-10-17 16:10:39 EDT (Wed, 17 Oct 2007)
@@ -131,13 +131,11 @@
     /// A strand is used for guaranteeing handlers are dispatched sequentially
     //boost::asio::strand strand_;
 
+ /// A std::set of all the requests
     set_type request_set_;
+ /// A std::queue of the pending requests
     queue_type request_queue_;
 
- //gateway_type gateway_;
-
- //friend class basic_gateway<protocol_type>;//gateway_type;
- //friend class basic_acceptor<protocol_type>;//class acceptor_type;
 #if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400))
     friend typename traits::request_type;//typename request_type;
 #else

Modified: sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/basic_request_acceptor.hpp
==============================================================================
--- sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/basic_request_acceptor.hpp (original)
+++ sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/basic_request_acceptor.hpp 2007-10-17 16:10:39 EDT (Wed, 17 Oct 2007)
@@ -29,26 +29,30 @@
     typedef service_type::protocol_type protocol_type;
     typedef int port_number_type;
 
- explicit basic_request_acceptor(basic_protocol_service<protocol_type>& s)
- : boost::asio::basic_io_object<RequestAcceptorService>(s.io_service())
+ explicit basic_request_acceptor(basic_protocol_service<protocol_type>& ps)
+ : boost::asio::basic_io_object<RequestAcceptorService>(ps.io_service())
     {
+ this->service.set_protocol_service(this->implementation, s);
     }
 
- explicit basic_request_acceptor(basic_protocol_service<protocol_type>& s
+ explicit basic_request_acceptor(basic_protocol_service<protocol_type>& ps
                                    , port_number_type port_num)
- : boost::asio::basic_io_object<RequestAcceptorService>(s.io_service())
+ : boost::asio::basic_io_object<RequestAcceptorService>(ps.io_service())
     {
+ this->service.set_protocol_service(this->implementation, ps);
     }
 
     ~basic_request_acceptor()
     {
     }
 
+ /// Check if the acceptor is open
     bool is_open()
     {
       return this->service.is_open(this->implementation);
     }
 
+ /// Open the acceptor
     template<typename Protocol>
     void open(Protocol& protocol)
     {
@@ -57,12 +61,37 @@
       detail::throw_error(ec);
     }
 
+ /// Open the acceptor
     template<typename Protocol>
- boost::system::error_code& open(Protocol& protocol, boost::system::error_code& ec)
+ boost::system::error_code
+ open(Protocol& protocol, boost::system::error_code& ec)
     {
       return this->service.open(this->implementation, protocol, ec);
     }
 
+ /// Cancel all asynchronous operations associated with the acceptor.
+ boost::system::error_code
+ cancel()
+ {
+ return this->service.cancel(this->implementation);
+ }
+
+ /// Close the acceptor
+ void close()
+ {
+ boost::system::error_code ec;
+ this->service.close(this->implementation, ec);
+ detail::throw_error(ec);
+ }
+
+ /// Close the acceptor
+ boost::system::error_code
+ close(boost::system::error_code& ec)
+ {
+ return this->service.close(this->implementation, ec);
+ }
+
+ /// Accept one request
     template<typename CommonGatewayRequest>
     void accept(CommonGatewayRequest& request)
     {
@@ -71,12 +100,15 @@
       detail::throw_error(ec);
     }
 
- template<typename CommonGatewayRequest> boost::system::error_code&
+ /// Accept one request
+ template<typename CommonGatewayRequest>
+ boost::system::error_code&
     accept(CommonGatewayRequest& request, boost::system::error_code& ec)
     {
       return this->service.accept(this->implementation, request, ec);
     }
 
+ /// Asynchronously accept one request
     template<typename CommonGatewayRequest, typename Handler>
     void async_accept(CommonGatewayRequest& request, Handler handler)
     {

Modified: sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/cgi/cgi_service.hpp
==============================================================================
--- sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/cgi/cgi_service.hpp (original)
+++ sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/cgi/cgi_service.hpp 2007-10-17 16:10:39 EDT (Wed, 17 Oct 2007)
@@ -9,12 +9,12 @@
 #ifndef CGI_CGI_SERVICE_HPP_INCLUDED__
 #define CGI_CGI_SERVICE_HPP_INCLUDED__
 
-#include "../tags.hpp"
-#include "../connections/stdio.hpp"
-#include "../connections/async_stdio.hpp"
-#include "../gateway_impl/acgi_gateway_impl.hpp"
-#include "../gateway_service/acgi_gateway_service.hpp"
-#include "../basic_protocol_service.hpp"
+#include "boost/cgi/tags.hpp"
+#include "boost/cgi/connections/stdio.hpp"
+#include "boost/cgi/connections/async_stdio.hpp"
+#include "boost/cgi/gateway_impl/acgi_gateway_impl.hpp"
+#include "boost/cgi/gateway_service/acgi_gateway_service.hpp"
+#include "boost/cgi/basic_protocol_service.hpp"
 
 namespace cgi {
 

Added: sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/connections/shareable_tcp_socket.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/connections/shareable_tcp_socket.hpp 2007-10-17 16:10:39 EDT (Wed, 17 Oct 2007)
@@ -0,0 +1,111 @@
+// -- connections/shareable_tcp_socket.hpp --
+//
+// Copyright (c) Darren Garvey 2007.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+////////////////////////////////////////////////////////////////
+#ifndef CGI_CONNECTIONS_SHAREABLE_TCP_SOCKET_HPP_INCLUDED__
+#define CGI_CONNECTIONS_SHAREABLE_TCP_SOCKET_HPP_INCLUDED__
+
+#include <boost/shared_ptr.hpp>
+
+#include "boost/cgi/tags.hpp"
+#include "boost/cgi/io_service.hpp"
+#include "boost/cgi/connection_base.hpp"
+#include "boost/cgi/basic_connection.hpp"
+#include "boost/cgi/detail/push_options.hpp"
+
+namespace cgi {
+
+ template<>
+ class basic_connection<tags::shareable_tcp_socket>
+ : public connection_base
+ {
+ public:
+ typedef boost::shared_ptr<
+ basic_connection<tags::shareable_tcp_socket> > pointer;
+ typedef boost::mutex mutex_type;
+
+ // A wrapper to provide condition_type::pointer
+ struct condition_type : public boost::condition
+ { typedef boost::shared_ptr<boost::condition> pointer; };
+
+ basic_connection(io_service& ios)
+ : sock_(ios)
+ , mutex_()
+ , condition_()
+ {
+ }
+
+ static pointer create(io_service& ios)
+ {
+ return static_cast<pointer>(
+ new basic_connection<tags::shareable_tcp_socket>(ios));
+ }
+
+ template<typename MutableBufferSequence>
+ std::size_t read_some(MutableBufferSequence& buf)
+ {
+ return sock_.read_some(buf);
+ }
+
+ template<typename MutableBufferSequence>
+ std::size_t read_some(MutableBufferSequence& buf
+ , boost::system::error_code& ec)
+ {
+ return sock_.read_some(buf, ec);
+ }
+
+ template<typename MutableBufferSequence, typename Handler>
+ void async_read_some(MutableBufferSequence& buf, Handler handler)
+ {
+ sock_.async_read_some(buf, handler);
+ }
+
+ template<typename ConstBufferSequence>
+ std::size_t write_some(ConstBufferSequence& buf)
+ {
+ return sock_.write_some(buf);
+ }
+
+ template<typename ConstBufferSequence>
+ std::size_t write_some(ConstBufferSequence& buf
+ , boost::system::error_code& ec)
+ {
+ return sock_.write_some(buf, ec);
+ }
+
+ template<typename ConstBufferSequence, typename Handler>
+ void async_write_some(ConstBufferSequence& buf, Handler handler)
+ {
+ sock_.async_write_some(buf, handler);
+ }
+
+ void close()
+ {
+ sock_.close();
+ }
+
+ mutex_type& mutex() { return mutex_; }
+ condtion_type& condition() { return condition_; }
+ private:
+
+ boost::asio::ip::tcp::socket sock_;
+ mutex_type mutex_;
+ condition_type condition_;
+ };
+
+ // probably deletable typedef (leaving it here to keep an open mind)
+ typedef basic_connection<tags::shareable_tcp_socket> shareable_tcp_connection;
+
+ namespace connection {
+ typedef basic_connection<tags::shareable_tcp_socket> shareable_tcp;
+ } // namespace connection
+
+} // namespace cgi
+
+#include "boost/cgi/detail/pop_options.hpp"
+
+#endif // CGI_CONNECTIONS_SHAREABLE_TCP_SOCKET_HPP_INCLUDED__

Modified: sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/connections/tcp_socket.hpp
==============================================================================
--- sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/connections/tcp_socket.hpp (original)
+++ sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/connections/tcp_socket.hpp 2007-10-17 16:10:39 EDT (Wed, 17 Oct 2007)
@@ -11,11 +11,11 @@
 
 #include <boost/shared_ptr.hpp>
 
-#include "../tags.hpp"
-#include "../io_service.hpp"
-#include "../connection_base.hpp"
-#include "../basic_connection.hpp"
-#include "../detail/push_options.hpp"
+#include "boost/cgi/tags.hpp"
+#include "boost/cgi/io_service.hpp"
+#include "boost/cgi/connection_base.hpp"
+#include "boost/cgi/basic_connection.hpp"
+#include "boost/cgi/detail/push_options.hpp"
 
 namespace cgi {
 
@@ -75,7 +75,7 @@
       sock_.async_write_some(buf, handler);
     }
 
- void stop()
+ void close()
     {
       sock_.close();
     }
@@ -86,15 +86,12 @@
 
   typedef basic_connection<tags::tcp_socket> tcp_connection;
 
-
- //template<typename ProtocolService = detail::fcgi_service>
- //struct tcp_connection
- //{
- // typedef basic_connection<tags::tcp_socket, ProtocolService> type;
- //};
+ namespace connection {
+ typedef basic_connection<tags::tcp_socket> tcp;
+ }// namespace connection
 
 } // namespace cgi
 
-#include "../detail/pop_options.hpp"
+#include "boost/cgi/detail/pop_options.hpp"
 
 #endif // CGI_CONNECTIONS_TCP_SOCKET_HPP_INCLUDED__

Modified: sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/io_service_provider.hpp
==============================================================================
--- sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/io_service_provider.hpp (original)
+++ sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/io_service_provider.hpp 2007-10-17 16:10:39 EDT (Wed, 17 Oct 2007)
@@ -92,7 +92,7 @@
 
     cgi::io_service& io_service()
     {
- return boost::ref(*current_++);
+ return *current_++;
     }
 
     void run()

Modified: sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/scgi/acceptor_service_impl.hpp
==============================================================================
--- sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/scgi/acceptor_service_impl.hpp (original)
+++ sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/scgi/acceptor_service_impl.hpp 2007-10-17 16:10:39 EDT (Wed, 17 Oct 2007)
@@ -13,6 +13,7 @@
 
 #include <boost/ref.hpp>
 #include <boost/bind.hpp>
+#include <boost/shared_ptr.hpp>
 #include <boost/utility/enable_if.hpp>
 
 //#include "is_async.hpp"
@@ -25,8 +26,14 @@
 
 namespace cgi {
 
- /// The generic service class for basic_request<>s
+ /// The service_impl class for SCGI basic_request_acceptor<>s
   /**
+ * Note: this is near enough to being generic. It will hopefully translate
+ * directly to the fcgi_acceptor_service_impl. In other words you would
+ * then have one acceptor_service_impl<>, so you'd use
+ * acceptor_service_impl<scgi> acceptor_service_impl_; // and
+ * acceptor_service_impl<fcgi> acceptor_service_impl_; // etc...
+ *
    * Note: If the protocol is an asynchronous protocol, which means it requires
    * access to a boost::asio::io_service instance, then this class becomes a
    * model of the Service concept (**LINK**) and must only use the constructor
@@ -34,71 +41,111 @@
    * the class can be used without a ProtocolService.
    */
   template<typename Protocol>
- class scgi_request_acceptor_service
+ class scgi_acceptor_service_impl
     : public detail::service_base<request_service<Protocol> >
   {
   public:
- //typedef typename service_impl_type::impl_type impl_type;
-
- typedef scgi_request_acceptor_impl implementation_type;
- typedef implementation_type::protocol_type protocol_type;
+ //typedef scgi_request_acceptor_impl implementation_type;
+ typedef typename implementation_type::protocol_type protocol_type;
     typedef basic_protocol_service<protocol_type> protocol_service_type;
+ typedef boost::asio::ip::tcp native_protocol_type;
+ typedef acceptor_service_type::native_type native_type;
+ typedef boost::asio::socket_acceptor_service<
+ native_protocol_type> acceptor_service_type;
 
     /// The unique service identifier
     //static boost::asio::io_service::id id;
 
- scgi_request_acceptor_service(cgi::io_service& ios)
+ struct implementation_type
+ {
+ typedef Protocol protocol_type;
+ typedef scgi::request request_type;
+ acceptor_service_type::implementation_type acceptor_;
+ boost::mutex mutex_;
+ std::queue<boost::shared_ptr<request_type> > waiting_requests_;
+ protocol_service_type* service_;
+ };
+
+ explicit scgi_request_acceptor_service(cgi::io_service& ios)
       : detail::service_base<request_service<Protocol> >(ios)
+ , acceptor_service_(boost::asio::use_service<acceptor_service_type>(ios)
     {
+ }
 
+ void set_protocol_service(implementation_type& impl
+ , protocol_service_type& ps)
+ {
+ impl.protocol_service_ = &ps;
+ }
+
+ protocol_service_type&
+ get_protocol_service(implementation_type& impl)
+ {
+ BOOST_ASSERT(impl.service_ != NULL);
+ return *impl.service_;
     }
 
     void construct(implementation_type& impl)
     {
- impl.acceptor_ptr().reset(impl::acceptor_type(this->io_service()));
+ acceptor_service_.construct(impl.acceptor_);
+ //impl.acceptor_ptr().reset(impl::acceptor_type(this->io_service()));
     }
 
     void destroy(implementation_type& impl)
     {
- impl.acceptor().close();
+ // close/reject all the waiting requests
+ /***/
+ acceptor_service_.destroy(impl.acceptor_);
     }
 
     void shutdown_service()
     {
+ acceptor_service_.shutdown_service();
     }
 
+ /// Check if the given implementation is open.
     bool is_open(implementation_type& impl)
     {
- return impl.is_open();
+ return acceptor_service_.is_open(impl.acceptor_);
     }
 
- template<typename Protocol>
- boost::system::error_code& open(implementation_type& impl
- , Protocol& protocol
- , boost::system::error_code& ec)
+ /// Open a new *socket* acceptor implementation.
+ boost::system::error_code
+ open(implementation_type& impl, const native_protocol_type& protocol
+ , boost::system::error_code& ec)
     {
- return impl.acceptor().open(protocol, ec);
+ return acceptor_service_.open(impl.acceptor_, protocol, ec);
     }
 
-
+ /// Assign an existing native acceptor to a *socket* acceptor.
+ boost::system::error_code
+ assign(implementation_type& impl, const native_protocol_type& protocol
+ , const native_type& native_acceptor
+ , boost::system::error_code& ec)
+ {
+ return acceptor_service_.assign(impl.acceptor_, protocol, native_acceptor
+ , ec);
+ }
 
+ /// Accepts one request.
     template<typename CommonGatewayRequest>
- boost::system::error_code& accept(implementation_type& impl
- , CommonGatewayRequest& request
- , boost::system::error_code& ec)
+ boost::system::error_code
+ accept(implementation_type& impl, CommonGatewayRequest& request
+ , boost::system::error_code& ec)
     {
       {
- boost::thread::mutex::scoped_lock lk(impl.mutex());
- if (!impl.waiting_requests().empty())
+ boost::mutex::scoped_lock lk(impl.mutex_);
+ if (!impl.waiting_requests_.empty())
         {
- request = *(impl.waiting_requests().front());
- impl.waiting_requests().pop();
+ request = *(impl.waiting_requests_.front());
+ impl.waiting_requests_.pop();
           return ec;
         }
       }
- return impl.acceptor().accept(request.client(), ec);
+ return impl.acceptor_.accept(request.client().connection(), ec);
     }
 
+ /// Asynchronously accepts one request.
     template<typename CommonGatewayRequest, typename Handler>
     void async_accept(implementation_type& impl, CommonGatewayRequest& request
                      , Handler handler, boost::system::error_code& ec)
@@ -108,23 +155,27 @@
                    , boost::ref(impl), boost::ref(request), handler, ec));
     }
   private:
- //boost::asio::ip::tcp::acceptor acceptor_;
-
     template<typename CommonGatewayRequest, typename Handler>
     void check_for_waiting_request(implementation_type& impl
                                   , CommonGatewayRequest& request
                                   , Handler handler)
     {
       {
- boost::thread::mutex::scoped_lock lk(impl.mutex());
- if (!impl.waiting_requests().empty())
+ boost::mutex::scoped_lock lk(impl.mutex_);
+ if (!impl.waiting_requests_.empty())
         {
- request = *(impl.waiting_requests().front());
- impl.waiting_requests().pop();
+ request = *(impl.waiting_requests_.front());
+ impl.waiting_requests_.pop();
           return handler(ec); // this could be `io_service::post`ed again
         }
       }
- return impl.accceptor().async_accept(request.client(), handler);
+ return accceptor_service_.async_accept(request.client().connection()
+ , handler);
+ }
+
+ private:
+ /// The underlying socket acceptor service.
+ acceptor_service_type& acceptor_service_;
   };
 
 } // namespace cgi

Added: sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/scgi/client.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/scgi/client.hpp 2007-10-17 16:10:39 EDT (Wed, 17 Oct 2007)
@@ -0,0 +1,99 @@
+// -- fcgi/client.hpp --
+//
+// Copyright (c) Darren Garvey 2007.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+////////////////////////////////////////////////////////////////
+#ifndef CGI_FCGI_SPECIFICATION_HPP_INCLUDED__
+#define CGI_FCGI_SPECIFICATION_HPP_INCLUDED__
+
+#include "boost/cgi/map.hpp"
+#include "boost/cgi/io_service.hpp"
+#include "boost/cgi/basic_client.hpp"
+
+namespace cgi {
+ namespace scgi {
+
+ /// A client that uses a TCP socket that owned by it.
+ template<>
+ class basic_client<tcp_connection>
+ {
+ public:
+ typedef ::cgi::io_service io_service_type;
+ typedef cgi::map map_type;
+ typedef Protocol protocol_type;
+ struct connection_type : Connection
+ { typedef boost::shared_ptr<connection_type> pointer; }
+
+ basic_client(io_service_type& ios)
+ : io_service_(ios)
+ , connection_(new connection_type::pointer(ios))
+ {
+ }
+
+ io_service_type& io_service() { return io_service_; }
+
+ /// Associate a connection with this client
+ /**
+ * Note: the connection must have been created using the new operator
+ */
+ bool set_connection(connection_type* conn)
+ {
+ // make sure there isn't already a connection associated with the client
+ if (!connection_) return false;
+ connection_.reset(conn);
+ return true;
+ }
+
+ /// Associate a connection with this client
+ bool set_connection(connection_type::pointer& conn)
+ {
+ // make sure there isn't already a connection associated with the client
+ if (!connection_) return false;
+ connection_ = conn;
+ return true;
+ }
+
+ /// Get a shared_ptr of the connection associated with the client.
+ connection_type::pointer&
+ connection() { return connection_; }
+
+ /// Write some data to the client.
+ template<typename ConstBufferSequence>
+ std::size_t write_some(const ConstBufferSequence& buf
+ , boost::system::error_code& ec)
+ {
+ return connection_->write_some(buf, ec);
+ }
+
+ /// Read some data from the client.
+ template<typename MutableBufferSequence>
+ std::size_t read_some(const MutableBufferSequence& buf
+ , boost::system::error_code& ec)
+ {
+ return connection_->read_some(buf, ec);
+ }
+
+ /// Asynchronously write some data to the client.
+ template<typename ConstBufferSequence, typename Handler>
+ void async_write_some(const ConstBufferSequence& buf, Handler handler)
+ {
+ connection_->async_write_some(buf, handler);
+ }
+
+ /// Asynchronously read some data from the client.
+ template<typename MutableBufferSequence, typename Handler>
+ void async_read_some(const MutableBufferSequence& buf, Handler handler)
+ {
+ connection_->async_read_some(buf, handler);
+ }
+ private:
+ connection_ptr connection_;
+ };
+
+ } // namespace fcgi
+}// namespace cgi
+
+#endif // CGI_FCGI_SPECIFICATION_HPP_INCLUDED__

Modified: sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/scgi/request.hpp
==============================================================================
--- sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/scgi/request.hpp (original)
+++ sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/scgi/request.hpp 2007-10-17 16:10:39 EDT (Wed, 17 Oct 2007)
@@ -9,8 +9,8 @@
 #ifndef CGI_SCGI_REQUEST_HPP_INCLUDED__
 #define CGI_SCGI_REQUEST_HPP_INCLUDED__
 
-#include "../tags.hpp"
-#include "../basic_request.hpp"
+#include "boost/cgi/tags.hpp"
+#include "boost/cgi/basic_request.hpp"
 
 namespace cgi {
 
@@ -18,6 +18,10 @@
 
   typedef basic_request<scgi_request_service> scgi_request;
 
+ namespace scgi {
+ // typedef for typical usage (SCGI)
+ typedef basic_request<scgi_request_service> request;
+ } // namespace scgi
 } // namespace cgi
 
 #endif // CGI_SCGI_REQUEST_HPP_INCLUDED__

Modified: sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/scgi/request_acceptor_service.hpp
==============================================================================
--- sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/scgi/request_acceptor_service.hpp (original)
+++ sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/scgi/request_acceptor_service.hpp 2007-10-17 16:10:39 EDT (Wed, 17 Oct 2007)
@@ -22,7 +22,7 @@
 
 namespace cgi {
 
- /// The generic service class for basic_request<>s
+ /// The service class for SCGI basic_request_acceptor<>s
   /**
    * Note: If the protocol is an asynchronous protocol, which means it requires
    * access to a boost::asio::io_service instance, then this class becomes a
@@ -44,22 +44,12 @@
 
     /// The unique service identifier
     //static boost::asio::io_service::id id;
- //explicit request_service()
- //{
- //}
 
     scgi_request_acceptor_service(cgi::io_service& ios)
       : detail::service_base<request_service<Protocol> >(ios)
     {
     }
 
- /*
- request_service(protocol_service_type& ps)
- : detail::service_base<request_service<Protocol> >(ps.io_service())
- {
- }
- */
-
     void construct(implementation_type& impl)
     {
       service_impl_.construct(impl);
@@ -75,9 +65,14 @@
       service_impl_.shutdown_service();
     }
 
- bool is_open()
+ bool is_open(implementation_type& impl)
+ {
+ return service_impl_.is_open(impl);
+ }
+
+ void close(implementation_type& impl)
     {
- return service_impl_.is_open();
+ return service_impl_.close(impl);
     }
 
     template<typename CommonGatewayRequest>
@@ -101,5 +96,4 @@
 
 #include "boost/cgi/detail/pop_options.hpp"
 
-
-endif // CGI_REQUEST_SERVICE_HPP_INCLUDED
+#endif // CGI_REQUEST_SERVICE_HPP_INCLUDED

Modified: sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/scgi/request_impl.hpp
==============================================================================
--- sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/scgi/request_impl.hpp (original)
+++ sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/scgi/request_impl.hpp 2007-10-17 16:10:39 EDT (Wed, 17 Oct 2007)
@@ -11,14 +11,15 @@
 
 #include <boost/shared_ptr.hpp>
 
-#include "../map.hpp"
-#include "../role_type.hpp"
-#include "../status_type.hpp"
-#include "../http/status_code.hpp"
-#include "../connections/tcp_socket.hpp"
+#include "boost/cgi/map.hpp"
+#include "boost/cgi/role_type.hpp"
+#include "boost/cgi/status_type.hpp"
+#include "boost/cgi/http/status_code.hpp"
+#include "boost/cgi/connections/tcp_socket.hpp"
 
 namespace cgi {
 
+ /// The implementation_type for scgi_request_service
   class scgi_request_impl
   {
   public:
@@ -30,6 +31,7 @@
       : stdin_parsed_(false)
       , http_status_(http::ok)
       , request_status_(unloaded)
+ , request_finished_(false)
     {
     }
 
@@ -57,7 +59,7 @@
     map_type cookie_vars_;
 
     std::string null_str_;
-
+ bool request_finished_;
   };
 
 } // namespace cgi

Modified: sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/scgi/request_service.hpp
==============================================================================
--- sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/scgi/request_service.hpp (original)
+++ sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/scgi/request_service.hpp 2007-10-17 16:10:39 EDT (Wed, 17 Oct 2007)
@@ -11,17 +11,18 @@
 
 #include <boost/system/error_code.hpp>
 
-#include "request_impl.hpp"
-#include "../map.hpp"
-#include "../tags.hpp"
-#include "../role_type.hpp"
-#include "../io_service.hpp"
-#include "../detail/throw_error.hpp"
-#include "../detail/service_base.hpp"
-#include "../detail/extract_params.hpp"
+#include "boost/cgi/scgi/request_impl.hpp"
+#include "boost/cgi/map.hpp"
+#include "boost/cgi/tags.hpp"
+#include "boost/cgi/role_type.hpp"
+#include "boost/cgi/io_service.hpp"
+#include "boost/cgi/detail/throw_error.hpp"
+#include "boost/cgi/detail/service_base.hpp"
+#include "boost/cgi/detail/extract_params.hpp"
 
 namespace cgi {
 
+ /// The IoObjectService class for a SCGI basic_request<>s
   class scgi_request_service
     : public detail::service_base<scgi_request_service>
   {

Added: sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/scgi/scgi.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/scgi/scgi.hpp 2007-10-17 16:10:39 EDT (Wed, 17 Oct 2007)
@@ -0,0 +1,33 @@
+// -- scgi/scgi.hpp --
+//
+// Copyright (c) Darren Garvey 2007.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+////////////////////////////////////////////////////////////////
+#ifndef CGI_SCGI_SCGI_HPP_INCLUDED__
+#define CGI_SCGI_SCGI_HPP_INCLUDED__
+
+#include "boost/cgi/tags.hpp"
+#include "boost/cgi/basic_request_fwd.hpp"
+#include "boost/cgi/basic_request_acceptor_fwd.hpp"
+#include "boost/cgi/basic_protocol_service_fwd.hpp"
+
+namespace cgi {
+
+ /// A class representing the SCGI protocol
+ class scgi
+ {
+ public:
+ // typedefs for common usage
+ typedef basic_request<scgi> request;
+ typedef basic_request_acceptor<scgi> acceptor;
+ typedef basic_protocol_service<scgi> service;
+
+ typedef boost::asio::ip::tcp native_protocol;
+ };
+
+} // namespace cgi
+
+#endif // CGI_SCGI_SCGI_HPP_INCLUDED__

Modified: sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/scgi/service.hpp
==============================================================================
--- sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/scgi/service.hpp (original)
+++ sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/scgi/service.hpp 2007-10-17 16:10:39 EDT (Wed, 17 Oct 2007)
@@ -9,13 +9,19 @@
 #ifndef CGI_SCGI_SERVICE_HPP_INCLUDED__
 #define CGI_SCGI_SERVICE_HPP_INCLUDED__
 
-#include "../tags.hpp"
-#include "../basic_protocol_service.hpp"
+#include "boost/cgi/tags.hpp"
+#include "boost/cgi/basic_protocol_service.hpp"
 
 namespace cgi {
 
- typedef basic_protocol_service<tags::scgi> scgi_service;
+ //typedef basic_protocol_service<tags::scgi> scgi_service;
 
+ namespace scgi {
+
+ // typedef for standard scgi::service (a model of ProtocolService)
+ typedef basic_protocol_service<tags::scgi> service;
+
+ }
 } // namespace cgi
 
 #endif // CGI_SCGI_SERVICE_HPP_INCLUDED__

Modified: sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/scgi/service_impl.hpp
==============================================================================
--- sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/scgi/service_impl.hpp (original)
+++ sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/scgi/service_impl.hpp 2007-10-17 16:10:39 EDT (Wed, 17 Oct 2007)
@@ -9,6 +9,12 @@
 #ifndef CGI_SCGI_SERVICE_IMPL_HPP_INCLUDED__
 #define CGI_SCGI_SERVICE_IMPL_HPP_INCLUDED__
 
+/*********************
+
+THIS IS NOT A PART OF 'THE CODEBASE' ATM
+
+*********************/
+
 #include <boost/system/error_code.hpp>
 
 #include "boost/cgi/scgi/request_impl.hpp"
@@ -22,12 +28,12 @@
 
 namespace cgi {
 
- class scgi_request_service_impl
+ // The implementation of the ProtocolService for SCGI
+ class scgi_service_impl
     : public detail::service_base<scgi_service_impl>
   {
   public:
     typedef tags::scgi protocol_type;
- typedef scgi_request_impl implementation_type;
     typedef cgi::map map_type;
 
     scgi_request_service_impl(cgi::io_service& ios)
@@ -40,201 +46,6 @@
     {
     }
 
- void construct(implementation_type& impl)
- {
- impl.connection()
- = implementation_type::connection_type::create(this->io_service());
- }
-
- void destroy(implementation_type& impl)
- {
- //impl.set_state(aborted);
- }
-
- boost::system::error_code& load(implementation_type& impl, bool parse_stdin
- , boost::system::error_code& ec)
- {
- const std::string& request_method = meta_env(impl, "REQUEST_METHOD", ec);
- if (request_method == "GET")
- if (parse_get_vars(impl, ec))
- return ec;
- else
- if (request_method == "POST" && parse_stdin)
- if (parse_post_vars(impl, ec))
- return ec;
-
- parse_cookie_vars(impl, ec);
- return ec;
- }
-
- template<typename MutableBufferSequence>
- std::size_t read_some(implementation_type& impl
- , const MutableBufferSequence& buf
- , boost::system::error_code& ec)
- {
- std::size_t s = impl.connection()->read_some(buf, ec);
- return s;
- }
-
- template<typename ConstBufferSequence>
- std::size_t write_some(implementation_type& impl
- , const ConstBufferSequence& buf
- , boost::system::error_code& ec)
- {
- return impl.connection()->write_some(buf, ec);
- }
-
- //template<typename VarType> map_type& var(implementation_type&) const;
-
- std::string meta_get(implementation_type& impl, const std::string& name
- , boost::system::error_code& ec)
- {
- return var(impl.get_vars_, name, ec);
- }
-
- map_type& meta_get(implementation_type& impl)
- {
- return impl.get_vars_;
- }
-
- /// Find the post meta-variable matching name
- /**
- * @param greedy This determines whether more data can be read to find
- * the variable. The default is true to cause least surprise in the common
- * case of having not parsed any of the POST data.
-
- -----------------------------------------------
- Should this return a pair of iterators instead?
- What about url_decoding?
- -----------------------------------------------
-
- */
- std::string meta_post(implementation_type& impl, const std::string& name
- , boost::system::error_code& ec
- , bool greedy = true)
- {
- const std::string& val = var(impl.post_vars_, name, ec);
- if (val.empty() && greedy && !ec)
- {
-
- }
-
- return val;
- }
-
- map_type& meta_post(implementation_type& impl)
- {
- return impl.post_vars_;
- }
-
-
- /// Find the cookie meta-variable matching name
- std::string cookie(implementation_type& impl, const std::string& name
- , boost::system::error_code& ec)
- {
- return var(impl.cookie_vars_, name, ec);
- }
-
- map_type& meta_cookie(implementation_type& impl)
- {
- return impl.cookie_vars_;
- }
-
-
- /// Find the environment meta-variable matching name
- std::string meta_env(implementation_type& impl, const std::string& name
- , boost::system::error_code& ec)
- {
- return var(impl.env_vars_, name, ec);
- }
-
-
- role_type get_role(implementation_type& impl)
- {
- return responder;
- }
-
- protected:
- /// Extract the var value from
- std::string var(map_type& meta_data, const std::string& name
- , boost::system::error_code& ec)
- {
- /* Alt:
- if ((typename map_type::iterator pos = meta_data.find(name))
- != meta_data.end())
- {
- return *pos;
- }
- return std::string();
- **/
-
- if( meta_data.find(name) != meta_data.end() )
- return meta_data[name];
- return "";
- }
-
- /// Read and parse the cgi GET meta variables
- boost::system::error_code&
- parse_get_vars(implementation_type& impl, boost::system::error_code& ec)
- {
- detail::extract_params(meta_env(impl, "QUERY_STRING", ec)
- , impl.get_vars_
- , boost::char_separator<char>
- ("", "=&", boost::keep_empty_tokens)
- , ec);
-
- return ec;
- }
-
- /// Read and parse the HTTP_COOKIE meta variable
- template<typename RequestImpl>
- boost::system::error_code&
- parse_cookie_vars(implementation_type& impl, boost::system::error_code& ec)
- {
- // Make sure this function hasn't already been called
- //BOOST_ASSERT( impl.cookie_vars_.empty() );
-
- std::string vars = meta_env(impl, "HTTP_COOKIE", ec);
- if (vars.empty())
- return ec;
-
- detail::extract_params(meta_env(impl, "HTTP_COOKIE", ec)
- , impl.cookie_vars_
- , boost::char_separator<char>
- ("", "=&", boost::keep_empty_tokens)
- , ec);
-
- return ec;
- }
-
- /// Read and parse the cgi POST meta variables (greedily)
- template<typename RequestImpl>
- boost::system::error_code&
- parse_post_vars(implementation_type& impl, boost::system::error_code& ec)
- {
- // Make sure this function hasn't already been called
- //BOOST_ASSERT( impl.post_vars_.empty() );
-
- //# error "Not implemented"
-
- if (impl.stdin_parsed_)
- {
- }
-
- return ec;
- }
-
- /// Read and parse a single cgi POST meta variable (greedily)
- template<typename RequestImpl>
- boost::system::error_code&
- parse_one_post_var(implementation_type& impl, boost::system::error_code& ec)
- {
- //# error "Not implemented"
- return ec;
- }
-
- private:
- cgi::io_service& io_service_;
   };
 
 } // namespace cgi

Modified: sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/tags.hpp
==============================================================================
--- sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/tags.hpp (original)
+++ sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/boost/cgi/tags.hpp 2007-10-17 16:10:39 EDT (Wed, 17 Oct 2007)
@@ -31,6 +31,8 @@
    struct stdio {};
    struct async_stdio {};
    struct tcp_socket {};
+ // A shareable tcp_socket (ie. one that can be locked)
+ struct shareable_tcp_socket {};
 
  } // namespace tags
 } // namespace cgi

Modified: sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/libs/cgi/website/about.html
==============================================================================
--- sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/libs/cgi/website/about.html (original)
+++ sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/libs/cgi/website/about.html 2007-10-17 16:10:39 EDT (Wed, 17 Oct 2007)
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" >
   <head>
- <title>Fast/Simple/CGI C++ Library</title>
+ <title>The Fast/Simple/CGI C++ Library</title>
     <meta http-equiv="refresh" content="0; ../doc/html/cgi/preface.html#cgi.preface.overview"></meta>
     <link type="text/css" rel="stylesheet" href="cgi.css"/>
   </head>

Modified: sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/libs/cgi/website/bugs.html
==============================================================================
--- sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/libs/cgi/website/bugs.html (original)
+++ sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/libs/cgi/website/bugs.html 2007-10-17 16:10:39 EDT (Wed, 17 Oct 2007)
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" >
   <head>
- <title>Fast/Simple/CGI C++ Library</title>
+ <title>Bugs - Fast/Simple/CGI C++ Library</title>
     <link type="text/css" rel="stylesheet" href="cgi.css"/>
   </head>
   <body>

Modified: sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/libs/cgi/website/cgi.css
==============================================================================
--- sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/libs/cgi/website/cgi.css (original)
+++ sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/libs/cgi/website/cgi.css 2007-10-17 16:10:39 EDT (Wed, 17 Oct 2007)
@@ -103,3 +103,8 @@
   font-weight:bold;
   line-height:2em;
 }
+
+#about
+{
+ //background-color: #
+}

Modified: sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/libs/cgi/website/contact.html
==============================================================================
--- sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/libs/cgi/website/contact.html (original)
+++ sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/libs/cgi/website/contact.html 2007-10-17 16:10:39 EDT (Wed, 17 Oct 2007)
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" >
   <head>
- <title>Fast/Simple/CGI C++ Library</title>
+ <title>Contact Fast/Simple/CGI C++ Library</title>
     <link type="text/css" rel="stylesheet" href="cgi.css"/>
   </head>
   <body>
@@ -36,7 +36,7 @@
           <a href="#support" name="support">Support</a>
         </h3>
         <p>
- To paraphrase someone on the 'net, support comes at £3bn/sec.
+ To paraphrase someone on the 'net, support comes at £3bn/sec, but I have every intention of 'finishing' this library, quick-sharp like.
         </p>
       </div>
     </div>

Modified: sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/libs/cgi/website/credits.html
==============================================================================
--- sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/libs/cgi/website/credits.html (original)
+++ sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/libs/cgi/website/credits.html 2007-10-17 16:10:39 EDT (Wed, 17 Oct 2007)
@@ -1,60 +1,45 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" >
   <head>
- <title>Fast/Simple/CGI C++ Library</title>
+ <title>Credits - Fast/Simple/CGI C++ Library</title>
     <link type="text/css" rel="stylesheet" href="cgi.css"/>
   </head>
   <body>
     <div id="version">
- <div id="version">
- <a href="release_notes.html" style="font-family:helvetica;">
- Version: &nbsp;<i>alph01</i>
- </a>
- </div>
- <div id="body" class="body">
- <h2>Status</h2>
- <div class="body">
- <p The="" source for the project can be found in two places:
-
- <h4>Semi-stable code (remember this is alpha software)</h4>
- <span style="position:relative;left:2em;">
- <a href="http://svn.boost.org/svn/boost/sandbox/SOC/2007/cgi">
- http://svn.boost.org/svn/boost/sandbox/SOC/2007/cgi
- </a>
- </span>
-
- <h4>Development code (bleeding edge!)</h4>
- <span style="position:relative;left:2em;">
- <a href="http://cgi.svn.sourceforge.net/svnroot/cgi/cgi/branches">
- https://cgi.svn.sourceforge.net/svnroot/cgi/cgi/branches
- </a>
- </span>
+ <a href="release_notes.html" style="font-family:helvetica;">
+ Version: &nbsp;<i>alph01</i>
+ </a>
+ </div>
+ <div id="body" class="body">
+ <h2>Credits</h2>
+ <div class="body">
+ <p>
 
- <p>This page was last updated October 2007.</p>
+ </p>
       </div>
     </div>
- <div id="nav" class="nav">
- <a class="nav" href="index.html">Home</a>
- <br/>
- <a class="nav" href="license.html">License</a>
- <br/>
- <a class="nav" href="downloads.html">Downloads</a>
- <br/>
- <a class="nav" href="html/index.html">Documentation</a>
- <br/>
- <a class="nav" href="status.html">Status</a>
- <br/>
- <a class="nav" href="source.html">Source</a>
- <br/>
- <a class="nav" href="about.html">About</a>
- <br/>
- <a class="nav" href="contact.html">Contact</a>
- <br/>
- <a class="nav" href="bugs.html">Bugs</a>
- <br/>
- <a class="nav" href="credits.html">Credits</a>
- <br/>
- </div>
+ <div id="nav" class="nav">
+ <a class="nav" href="index.html">Home</a>
+ <br/>
+ <a class="nav" href="license.html">License</a>
+ <br/>
+ <a class="nav" href="downloads.html">Downloads</a>
+ <br/>
+ <a class="nav" href="html/index.html">Documentation</a>
+ <br/>
+ <a class="nav" href="status.html">Status</a>
+ <br/>
+ <a class="nav" href="source.html">Source</a>
+ <br/>
+ <a class="nav" href="about.html">About</a>
+ <br/>
+ <a class="nav" href="contact.html">Contact</a>
+ <br/>
+ <a class="nav" href="bugs.html">Bugs</a>
+ <br/>
+ <a class="nav" href="credits.html">Credits</a>
+ <br/>
+ </div>
     <div id="footer" class="footer">
       <div class="footer">
         <a href="http://sourceforge.net/projects/cgi">

Modified: sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/libs/cgi/website/downloads.html
==============================================================================
--- sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/libs/cgi/website/downloads.html (original)
+++ sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/libs/cgi/website/downloads.html 2007-10-17 16:10:39 EDT (Wed, 17 Oct 2007)
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" >
   <head>
- <title>Fast/Simple/CGI C++ Library</title>
+ <title>Downloads - Fast/Simple/CGI C++ Library</title>
     <link type="text/css" rel="stylesheet" href="cgi.css"/>
   </head>
   <body>

Modified: sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/libs/cgi/website/index.html
==============================================================================
--- sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/libs/cgi/website/index.html (original)
+++ sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/libs/cgi/website/index.html 2007-10-17 16:10:39 EDT (Wed, 17 Oct 2007)
@@ -13,9 +13,12 @@
   <div id="body" class="body">
     <h2>Fast/Simple/CGI C++ Library</h2>
     <div id="about" class="body">
- This is early in the days of a portable, copynull (free for private and/or commercial use) CGI library written using only Standard C++ (where possible) and Boost. Currently I'm working on SCGI support, but the main mid-term goal is to provide working FastCGI support also.
-
- The library
+ <p>
+ This is early in the days of a portable, copynull (free for private and/or commercial use) CGI library written using only Standard C++ (where possible) and Boost. Currently I'm working on SCGI support, but the main mid-term goal is to provide working FastCGI support also.
+ </p>
+ <p>
+ The library
+ </p>
     </div>
   </div>
   <div id="nav">

Modified: sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/libs/cgi/website/license.html
==============================================================================
--- sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/libs/cgi/website/license.html (original)
+++ sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/libs/cgi/website/license.html 2007-10-17 16:10:39 EDT (Wed, 17 Oct 2007)
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" >
   <head>
- <title>Fast/Simple/CGI C++ Library</title>
+ <title>License - Fast/Simple/CGI C++ Library</title>
     <link type="text/css" rel="stylesheet" href="cgi.css"/>
   </head>
   <body>

Modified: sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/libs/cgi/website/release_notes.html
==============================================================================
--- sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/libs/cgi/website/release_notes.html (original)
+++ sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/libs/cgi/website/release_notes.html 2007-10-17 16:10:39 EDT (Wed, 17 Oct 2007)
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" >
   <head>
- <title>Fast/Simple/CGI C++ Library</title>
+ <title>Release Notes - Fast/Simple/CGI C++ Library</title>
     <link type="text/css" rel="stylesheet" href="cgi.css"/>
   </head>
   <body>

Modified: sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/libs/cgi/website/source.html
==============================================================================
--- sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/libs/cgi/website/source.html (original)
+++ sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/libs/cgi/website/source.html 2007-10-17 16:10:39 EDT (Wed, 17 Oct 2007)
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" >
   <head>
- <title>Fast/Simple/CGI C++ Library</title>
+ <title>Source - Fast/Simple/CGI C++ Library</title>
     <link type="text/css" rel="stylesheet" href="cgi.css"/>
   </head>
   <body>

Modified: sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/libs/cgi/website/status.html
==============================================================================
--- sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/libs/cgi/website/status.html (original)
+++ sandbox/SOC/2007/cgi/branches/merge_from_SF_17_oct/libs/cgi/website/status.html 2007-10-17 16:10:39 EDT (Wed, 17 Oct 2007)
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" >
   <head>
- <title>Fast/Simple/CGI C++ Library</title>
+ <title>Status - Fast/Simple/CGI C++ Library</title>
     <link type="text/css" rel="stylesheet" href="cgi.css"/>
   </head>
   <body>
@@ -19,7 +19,6 @@
         <p>
           I don't have access to all my files right now (a corrupted hal.dll file snowballed a bit...), but the library is progressing. The TODO list in my head is quite large.
         </p>
- </p>
       </div>
     </div>
     <div id="nav" class="nav">


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk