PPI: Checkin of first compiling (yet not working) version
[senf.git] / Socket / SocketProtocol.hh
index e4f9f21..206f7cc 100644 (file)
@@ -29,7 +29,7 @@
         the number of heap-allocations per socket to one which is good.
  */
 
-// The private inheritance idea should indeed work very well: We just need to chnage the
+// The private inheritance idea should indeed work very well: We just need to change the
 // implementations of body() and protocol() and that of the ProtocolClient/ServerSocketHandle
 // constructors and the SocketBody constructor. The body and the protocol would still be visible
 // like several instances because of the private inheritance but we would save the backwards
 
 /** \defgroup protocol_group The Protocol Classes
 
-    \image html Protocols.png
+    \htmlonly
+    <map name="protocols">
+      <area shape="rect" alt="SocketPolicy" href="structsenf_1_1SocketPolicy.html" title="SocketPolicy" coords="416,50,536,68" />
+      <area shape="rect" alt="ConcreteSocketProtocol" href="classsenf_1_1ConcreteSocketProtocol.html" title="ConcreteSocketProtocol" coords="268,65,456,88" />
+      <area shape="rect" alt="SocketProtocol" href="classsenf_1_1SocketProtocol.html" title="SocketProtocol" coords="1,2,120,26" />
+      <area shape="rect" alt="BSDSocketProtocol" href="classsenf_1_1BSDSocketProtocol.html" title="BSDSocketProtocol" coords="124,118,276,143" />
+      <area shape="rect" alt="AddressableBSDSocketProtocol" href="classsenf_1_1AddressableBSDSocketProtocol.html" title="AddressableBSDSocketProtocol" coords="82,200,314,224" />
+      <area shape="rect" alt="IPv4Protocol" href="classsenf_1_1IPv4Protocol.html" title="IPv4Protocol" coords="149,272,252,296" />
+      <area shape="rect" alt="IPv6Protocol" href="classsenf_1_1IPv6Protocol.html" title="IPv6Protocol" coords="149,335,251,359" />
+      <area shape="rect" alt="TCPProtocol" href="classsenf_1_1TCPProtocol.html" title="TCPProtocol" coords="151,398,248,420" />
+      <area shape="rect" alt="TCPv4SocketProtocol" href="classsenf_1_1TCPv4SocketProtocol.html" title="TCPv4SocketProtocol" coords="288,471,405,494" />
+      <area shape="rect" alt="TCPv6SocketProtocol" href="classsenf_1_1TCPv6SocketProtocol.html" title="TCPv6SocketProtocol" coords="424,470,540,494" />
+      <area shape="rect" alt="PacketProtocol" href="classsenf_1_1PacketProtocol.html" title="PacketProtocol" coords="560,469,680,495" />
+    </map>
+    <img src="Protocols.png" border="0" alt="Protocols" usemap="#protocols">
+    \endhtmlonly
 
     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
@@ -50,9 +65,9 @@
     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.
+    defines the \e 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 and that no policy axis is allowed to be left unspecified.
 
     \see
         \ref handle_group \n
 
 // Custom includes
 #include <boost/utility.hpp>
-/** \fixme this is not nice. The includes and predefs should be restructured */
+// Hrmpf ... I have tried very hard, but I just can't find a nice, generic way to clean
+// up this include
 #include "SocketHandle.ih"
 
 //#include "SocketProtocol.mpp"
@@ -110,7 +126,8 @@ namespace senf {
 
         \attention SocketProtocol must \e always be inherited using public \e virtual inheritance.
      */
-    class SocketProtocol : boost::noncopyable
+    class SocketProtocol 
+        : boost::noncopyable
     {
     public:
         ///////////////////////////////////////////////////////////////////////////
@@ -152,9 +169,11 @@ namespace senf {
                                         ///< Return number of bytes available for reading without
                                         ///< blocking
                                         /**< This member will check in a (very, sigh) protocol
-                                             deqpendent way, how many bytes are guarateed to be
+                                             dependent way, how many bytes are guaranteed to be
                                              readable from the socket without blocking even if the
-                                             socket is blocking. */
+                                             socket is blocking. If the socket does not support
+                                             reading (viz. NotReadablePolicy is set), this member
+                                             should always return \c 0.*/
 
         virtual bool eof() const = 0;   ///< Check for end-of-file condition
                                         /**< This is another check which (like available()) is
@@ -218,7 +237,7 @@ namespace senf {
         SocketPolicy must be set to the complete socket policy of the protocol.
 
         A protocol implementation may define the protocol interface directly. It can also
-        (additnally) make use of multiple inheritance to combine a set of protocol facets into a
+        (additionally) make use of multiple inheritance to combine a set of protocol facets into a
         specific protocol implementation (i.e. TCPv4SocketProtocol inherits from
         ConcreteSocketProtocol and from the protocol facets IPv4Protocol, TCPProtocol,
         BSDSocketProtocol and AddressableBSDSocketProtocol). The protocol facets are not concrete
@@ -276,4 +295,6 @@ namespace senf {
 // c-file-style: "senf"
 // indent-tabs-mode: nil
 // ispell-local-dictionary: "american"
+// compile-command: "scons -u test"
+// comment-column: 40
 // End: