Implement INet6SocketAddress
[senf.git] / Socket / INetProtocol.hh
index 5c6bc7a..482f88e 100644 (file)
 // Free Software Foundation, Inc.,
 // 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
-// TODO: what about OOB data? das OOB Data block receipt of normal data ?
+/** \file
+    \brief IPv[46]Protocol public header
 
-// TODO: Implement IP_RECVERR / MSG_ERRQUEUE. This should be placed
-// into an additional protocol class since IP_RECVERR is only valid
-// for SOCK_DGRAM (UDP) and not SOCK_STREAM (TCP) sockets
+    \todo what about OOB data? 
+
+    \todo Implement IP_RECVERR / MSG_ERRQUEUE. This should be placed
+    into an additional protocol facet since IP_RECVERR is only valid
+    for SOCK_DGRAM (UDP) and not SOCK_STREAM (TCP) sockets
+ */
 
 #ifndef HH_INetProtocol_
 #define HH_INetProtocol_ 1
 
 namespace senf {
 
+    /// \addtogroup protocol_facets_group
+    /// @{
+
+    /** \brief Protocol facet providing IPv4 Addressing related API
+       
+       This protocol facet introduces all the socket api protocol members which are related to IPv4
+       addressing.
+
+       \todo Is it safe, not to allow setting the interface index on add/drop? what does it do
+       (especially if the local addres is given ?). What have I been thinking here ???
+       
+       \todo move all multicast-methods into an extra IPv4MulticastProtocol class (it's only
+       available on datagram sockets)
+
+       \todo the multicast add/remove/iface semantics are quite unclear ...
 
+       \todo connect() is only available on stream sockets. We want to access bind() and connet()
+       via the ClientSocketHandle -> see SocketProtocol todo point
+     */
     class IPv4Protocol 
         : public virtual SocketProtocol
     {
     public:
-        void connect(INet4Address const & address) const;
-        void bind(INet4Address const & address) const;
+        void connect(INet4Address const & address) const; ///< Connect to remote address
+                                        /**< \todo make this obsolete by allowing access to the
+                                            ClientSocketHandle from ConcreateSocketProtocol 
+                                            \param[in] address Address to connect to */
+        void bind(INet4Address const & address) const; ///< Set local socket address
+                                        /**< \todo make this obsolete by allowing access to the
+                                            ClientSocketHandle from ConcreateSocketProtocol 
+                                            \param[in] address Address to set */
 
-        unsigned mcTTL() const;
-        void mcTTL(unsigned value) const;
+        unsigned mcTTL() const;         ///< Return current multicast TTL
+        void mcTTL(unsigned value) const; ///< Set multicast TTL
 
-        bool mcLoop() const;
-        void mcLoop(bool value) const;
-
-        // TODO: Is it safe, not to allow setting the interface
-        // index on add/drop? what does it do (especially if
-        // the local addres is given ?)
-       
-        // TODO: move all multicast-methods into an extra
-        // IPv4MulticastProtocol class
+        bool mcLoop() const;            ///< Return current multicast loopback state
+        void mcLoop(bool value) const;  ///< Set multicast loopback state
 
         void mcAddMembership(INet4Address const & mcAddr) const;
+                                        ///< Join multicast group
+                                        /**< This member will add \a mcAddr to the list of multicast
+                                            groups received. The group is joined on the default
+                                            interface.
+                                            \param[in] mcAddr address of group to join
+                                            \todo fix this as soon as we have a real address class
+                                                (differend from the sockaddress class */
         void mcAddMembership(INet4Address const & mcAddr, INet4Address const & localAddr) const;
+                                        ///< join multicast group on a specific address/interface
+                                        /**< This member will add \a mcAddr to the list of multicast
+                                            groups received. The group is joined on the interface
+                                            with the given local address.
+                                            \param[in] mcAddr address of group to join
+                                            \param[in] localAddr address of interface to join on
+                                            \todo fix this as soon as we have a real address class
+                                                (differend from the sockaddress class */
 
         void mcDropMembership(INet4Address const & mcAddr) const;
+                                        ///< Leave multicast group 
+                                        /**< This member will remove \a mcAddr from the list of
+                                            multicast groups received. The group is left from the
+                                            default interface.
+                                            \param[in] mcAddr address of group to leave
+                                            \todo fix this as soon as we have a real address class
+                                                (differend from the sockaddress class */
         void mcDropMembership(INet4Address const & mcAddr, INet4Address const & localAddr) const;
+                                        ///< leave multicast group on a specific address/interface
+                                        /**< This member will remove \a mcAddr from the list of
+                                            multicast groups received. The group is left from the
+                                            interface with the given local address.
+                                            \param[in] mcAddr address of group to leave
+                                            \param[in] localAddr address of interface to leave from
+                                            \todo fix this as soon as we have a real address class
+                                                (differend from the sockaddress class */
 
         void mcIface(std::string iface = std::string()) const;
+                                        ///< set default multicast interface of the socket
+                                        /**< \param[in] iface name of interface */
     };
     
+    /** \brief Protocol facet providing IPv6 Addressing related API
+       
+       This protocol facet introduces all the socket api protocol members which are related to IPv6
+       addressing.
+
+       \todo implement
+     */
     class IPv6Protocol
         : public virtual SocketProtocol
     {};
 
+    /// @}
+
 }
 
 ///////////////////////////////hh.e////////////////////////////////////////
@@ -86,4 +148,5 @@ namespace senf {
 // Local Variables:
 // mode: c++
 // c-file-style: "senf"
+// fill-column: 100
 // End: