switch to new MPL based Fraunhofer FOKUS Public License
[senf.git] / senf / Socket / SocketProtocol.hh
index b41fccb..4d6346c 100644 (file)
@@ -2,23 +2,28 @@
 //
 // Copyright (C) 2006
 // Fraunhofer Institute for Open Communication Systems (FOKUS)
-// Competence Center NETwork research (NET), St. Augustin, GERMANY
-//     Stefan Bund <g0dil@berlios.de>
 //
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
+// The contents of this file are subject to the Fraunhofer FOKUS Public License
+// Version 1.0 (the "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at 
+// http://senf.berlios.de/license.html
 //
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
+// The Fraunhofer FOKUS Public License Version 1.0 is based on, 
+// but modifies the Mozilla Public License Version 1.1.
+// See the full license text for the amendments.
 //
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the
-// Free Software Foundation, Inc.,
-// 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+// Software distributed under the License is distributed on an "AS IS" basis, 
+// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License 
+// for the specific language governing rights and limitations under the License.
+//
+// The Original Code is Fraunhofer FOKUS code.
+//
+// The Initial Developer of the Original Code is Fraunhofer-Gesellschaft e.V. 
+// (registered association), Hansastraße 27 c, 80686 Munich, Germany.
+// All Rights Reserved.
+//
+// Contributor(s):
+//   Stefan Bund <g0dil@berlios.de>
 
 /** \file
     \brief SocketProtocol and ConcreteSocketProtocol public header
 
 /** \defgroup protocol_group The Protocol Classes
 
-     <div class="diamap" name="Protocols">
-     <span coords="0,0,118,25">\ref SocketProtocol</span>
-     <span coords="139,381,279,407">\ref UNSocketProtocol</span>
-     <span coords="527,412,693,438">\ref PacketSocketProtocol</span>
-     <span coords="214,49,471,86">\ref ConcreteSocketProtocol</span>
-     <span coords="135,112,283,137">\ref BSDSocketProtocol</span>
-     <span coords="114,258,304,284">\ref DatagramSocketProtocol</span>
-     <span coords="136,320,281,346">\ref TCPSocketProtocol</span>
-     <span coords="395,446,604,472">\ref UNDatagramSocketProtocol</span>
-     <span coords="89,189,329,215">\ref AddressableBSDSocketProtocol</span>
-     <span coords="282,481,444,507">\ref TCPv4SocketProtocol</span>
-     </div>
-     \htmlonly <img src="Protocols.png" border="0" alt="Protocols" usemap="#Protocols"> \endhtmlonly
+    \diaimage Protocols.dia
 
     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
@@ -69,7 +62,7 @@
 /** \defgroup concrete_protocol_group Protocol Implementations (Concrete Protocol Classes)
     \ingroup protocol_group
 
-    Theese protocol classes define concrete and complete protocol implementations. They inherit from
+    These protocol classes define concrete and complete protocol implementations. They inherit from
     ConcreteSocketProtocol and are used with the ProtocolClientSocketHandle and
     ProtocolServerSocketHandle templates to instantiate socket handles. Appropriate typedefs are
     always provided.
 #include "SocketHandle.ih"
 
 //#include "SocketProtocol.mpp"
-///////////////////////////////hh.p////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
 
 namespace senf {
 
     /// \addtogroup protocol_group
-    /// @{
+    //\{
 
     class SocketPolicyBase;
 
@@ -115,16 +108,16 @@ namespace senf {
 
         \attention SocketProtocol must \e always be inherited using public \e virtual inheritance.
      */
-    class SocketProtocol 
+    class SocketProtocol
         : boost::noncopyable
     {
     public:
-        ///////////////////////////////////////////////////////////////////////////
+        //-////////////////////////////////////////////////////////////////////////
         // Types
 
-        ///////////////////////////////////////////////////////////////////////////
+        //-////////////////////////////////////////////////////////////////////////
         ///\name Structors and default members
-        ///@{
+        //\{
 
         SocketProtocol();
         virtual ~SocketProtocol() = 0;
@@ -133,13 +126,13 @@ namespace senf {
         // no copy
         // no conversion constructors
 
-        ///@}
-        ///////////////////////////////////////////////////////////////////////////
+        //\}
+        //-////////////////////////////////////////////////////////////////////////
 
         virtual SocketPolicyBase const & policy() const = 0;
         ///< Access the policy instance
 
-        ///////////////////////////////////////////////////////////////////////////
+        //-////////////////////////////////////////////////////////////////////////
         // Virtual interface
 
         virtual unsigned available() const = 0;
@@ -150,7 +143,7 @@ namespace senf {
                                              in a single (non-blocking) read operation. If the
                                              socket does not support reading (viz. NotReadablePolicy
                                              is set), this member should always return \c 0.
-                                             
+
                                              Depending on the protocol, it may not be possible to
                                              return a good value. In this case, an upper bound may
                                              be returned (e.g.: When reading from a socket which
@@ -171,16 +164,16 @@ namespace senf {
         virtual void close();           ///< Close socket
                                         /**< This override will automatically \c shutdown() the
                                              socket whenever it is closed.
-                                             \throws senf::SystemException 
+                                             \throws senf::SystemException
                                              \fixme Move into (at least) BSDSOcketProtocol */
-        
+
         virtual void terminate() const; ///< Forcibly close socket
                                         /**< This override will automatically \c shutdown() the
                                              socket whenever it is called. Additionally it will
                                              disable SO_LINGER to ensure, that v_terminate will not
-                                             block. Like the overriden method, this member will ignore
-                                             failures and will never throw. It is therefore safe to be
-                                             called from a destructor. 
+                                             block. Like the overridden method, this member will
+                                             ignore failures and will never throw. It is therefore
+                                             safe to be called from a destructor.
                                              \fixme Move into (at least) BSDSocketProtocol */
 
         virtual void state(SocketStateMap & map, unsigned lod) const;
@@ -192,7 +185,7 @@ namespace senf {
                                              \a lod value with a default value of 0. The
                                              interpretation of the \a lod value is completely
                                              implementation defined.
-                                             
+
                                              Every class derived from SocketProtocol should
                                              reimplement state(). The reimplemented method should
                                              call (all) baseclass-implementations of this
@@ -203,21 +196,21 @@ namespace senf {
                                              keys are interpreted as hierarchical strings with '.'
                                              as a separator (like hostnames or struct or class
                                              members). They are automatically sorted correctly.
-                                             
+
                                              The values are std:string with one additional feature:
                                              they allow assignment or conversion from *any* type as
                                              long as that type is streamable. This simplifies
                                              assigning non-string values to the map:
-                                             
+
                                              \code
                                                  map["socket.protocol.ip.address"] << peer();
                                                  map["socket.protocol.tcp.backlog"] << backlog();
                                              \endcode
-                                             
+
                                              This will work even if peer() returns an ip-address
                                              object or backlog() returns an integer. The values are
                                              automatically converted to their string representation.
-                                             
+
                                              Additionally, if the slot the date is written to is not
                                              empty, the <tt>\<\<</tt> operator will add add a comma
                                              as separator. */
@@ -249,7 +242,7 @@ namespace senf {
 
         friend class SocketBody;
     };
-    
+
     template <class SPolicy> class ClientSocketHandle;
     template <class SPolicy> class ServerSocketHandle;
 
@@ -268,7 +261,7 @@ namespace senf {
         protocols themselves, they are combined to build concrete protocols. This structure will
         remove a lot of code duplication. It is important to ensure, that the protocol facets do not
         overlap, since otherwise there will be problems resolving overlapping members.
-        
+
         \doc init_client init_server
      */
     template <class SocketPolicy, class Self>
@@ -276,14 +269,14 @@ namespace senf {
         : public virtual SocketProtocol
     {
     public:
-        ///////////////////////////////////////////////////////////////////////////
+        //-////////////////////////////////////////////////////////////////////////
         // Types
 
         typedef SocketPolicy Policy;    ///< The protocols policy
 
-        ///////////////////////////////////////////////////////////////////////////
+        //-////////////////////////////////////////////////////////////////////////
         ///\name Structors and default members
-        ///@{
+        //\{
 
         ~ConcreteSocketProtocol() = 0;
 
@@ -291,13 +284,13 @@ namespace senf {
         // no copy
         // no conversion constructors
 
-        ///@}
-        ///////////////////////////////////////////////////////////////////////////
+        //\}
+        //-////////////////////////////////////////////////////////////////////////
 
         Policy const & policy() const;
-        
+
     protected:
-        ClientSocketHandle<Policy> clientHandle() const; 
+        ClientSocketHandle<Policy> clientHandle() const;
                                         ///< Get client handle for associated socket
                                         /**< Returns a client handle for the socket associated with
                                              this protocol instance */
@@ -314,10 +307,10 @@ namespace senf {
         Policy policy_;
     };
 
-    /// @}
+    //\}
 }
 
-///////////////////////////////hh.e////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
 #include "SocketProtocol.cci"
 //#include "SocketProtocol.ct"
 #include "SocketProtocol.cti"