Finished Socket library file handle hierarchy documentation
[senf.git] / Socket / SocketProtocol.hh
index 008716e..7b4b487 100644 (file)
 // 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>
-// FIXME: this is really bad. The includes and predefs should be restructured
+/** \fixme this is not nice. The includes and predefs should be restructured */
 #include "SocketHandle.ih"
 
 //#include "SocketProtocol.mpp"
@@ -33,6 +75,8 @@
 
 namespace senf {
 
+    /// \addtogroup protocol_group
+    /// @{
 
     class SocketPolicyBase;
 
@@ -107,6 +151,7 @@ namespace senf {
 
     };
 
+    /// @}
 }
 
 ///////////////////////////////hh.e////////////////////////////////////////