// Free Software Foundation, Inc.,
// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+/** \file
+
+ \idea We should optimize the protocol handling. Allocating a
+ protocol instance for every socket body seems quite
+ wasteful. However I have no idea, how to access the socket
+ handle from within the protocol interface if the protocol
+ class is a singleton. Maybe, we'll have some other idea to
+ reduce the number of heap allocations (like deriving the
+ SocketProtocol class (private? protected?) from the
+ SocketBody. (private inheritance is a form of 'has-a' instead
+ of 'is-a' which would fit very well here). This would allow to
+ reduce the number of heap-allocations per socket to one which
+ is good.
+ */
+
+/** \defgroup protocol_group The Protocol Classes
+
+ \image html Protocols.png
+
+ The socket handle classes and templates only implement the most
+ important socket API methods using the policy framework. To access
+ the complete API, the protocol interface is provided. Access to
+ the protocol interface is only possible via
+ senf::ProtocolClientSocketHandle and
+ senf::ProtocolServerSocketHandle which have the necessary \c
+ protocol() member. This member returns a reference to the protocol
+ class instance which contains members covering all the API
+ functions (mostly setsockopt/getsockopt related calls but there
+ may be more, this is completely up to the implementor of the
+ protocol class) not found in the SocketHandle interface. The
+ protocol interface is specific to the protocol. It's
+ implementation is quite free. The standard protocols are
+ implemented using a simple multiple-inheritance hierarchy as shown
+ above.
+
+ Since the protocol class is protocol specific (how intelligent
+ ...), the protocol class also defines the complete socket policy
+ to be used with it's protocol. Complete meaning, that every policy
+ axis must be assigned it's the most specific (that is derived)
+ policy class to be used with the protocol.
+ */
+
#ifndef HH_SocketProtocol_
#define HH_SocketProtocol_ 1
// Custom includes
#include <boost/utility.hpp>
-// TODO: this is really bad. This includes and predefs should be restructured
+/** \fixme this is not nice. The includes and predefs should be restructured */
#include "SocketHandle.ih"
//#include "SocketProtocol.mpp"
///////////////////////////////hh.p////////////////////////////////////////
-namespace satcom {
-namespace lib {
+namespace senf {
+
+ /// \addtogroup protocol_group
+ /// @{
class SocketPolicyBase;
};
-}}
+ /// @}
+}
///////////////////////////////hh.e////////////////////////////////////////
#include "SocketProtocol.cci"
\f
// Local Variables:
// mode: c++
-// c-file-style: "satcom"
+// c-file-style: "senf"
// End: