Implement INet6SocketAddress
[senf.git] / Socket / INetProtocol.hh
index 79a514c..482f88e 100644 (file)
 // 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 /** \file
+    \brief IPv[46]Protocol public header
 
     \todo what about OOB data? 
 
     \todo Implement IP_RECVERR / MSG_ERRQUEUE. This should be placed
-    into an additional protocol class since IP_RECVERR is only valid
+    into an additional protocol facet since IP_RECVERR is only valid
     for SOCK_DGRAM (UDP) and not SOCK_STREAM (TCP) sockets
  */
 
 
 namespace senf {
 
+    /// \addtogroup protocol_facets_group
+    /// @{
 
-    /** \brief
+    /** \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 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
+       \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;
+        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////////////////////////////////////////
@@ -91,4 +148,5 @@ namespace senf {
 // Local Variables:
 // mode: c++
 // c-file-style: "senf"
+// fill-column: 100
 // End: