00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef CONEXUS_IPV6UDP_H
00020 #define CONEXUS_IPV6UDP_H
00021
00022 #include <set>
00023
00024 #include <conexus/ipv6_ip.h>
00025
00041 namespace Conexus
00042 {
00043
00044 namespace IPv6
00045 {
00046
00054 class UDP : public IP
00055 {
00056 protected:
00057
00058 UDP( const struct in6_addr& local_if, uint16_t localport, uint16_t remoteport );
00059
00060 UDP( const std::string& local_if, uint16_t localport, uint16_t remoteport );
00061
00062 public:
00063
00064 typedef ConexusPointer<UDP> pointer;
00065
00066 CONEXUS_ENDPOINT_GENERIC_CREATE();
00067
00068 static pointer create( uint16_t localport = 0, uint16_t remoteport = 0 );
00069
00070 static pointer create( const struct in6_addr& local_if, uint16_t localport = 0, uint16_t remoteport = 0 );
00071
00072 static pointer create( const std::string& local_if, uint16_t localport = 0, uint16_t remoteport = 0 );
00073
00074 virtual ~UDP() throw();
00075
00076 virtual size_t input_available() throw();
00077
00078 virtual void bind() throw ( bind_exception );
00079
00080 virtual void bind( const Conexus::Address& a ) throw ( bind_exception );
00081
00082 virtual void close() throw ( close_exception );
00083
00087 virtual int output_pending();
00088
00089 virtual void connect() throw ( connect_exception );
00090
00091 virtual void connect( const Address& a ) throw ( connect_exception );
00092
00110 virtual void set_write_without_connect( bool value = true );
00111
00112 virtual bool write_without_connect() const;
00113
00114 void add_multicast_interface( unsigned iface_index );
00115
00116 void add_multicast_interface( const std::string& iface_name );
00117
00118 void remove_multicast_interface( unsigned iface_index );
00119
00120 void remove_multicast_interface( const std::string& iface_name );
00121
00122 bool is_multicast_interface( unsigned iface_index );
00123
00124 bool is_multicast_interface( const std::string& iface_name );
00125
00126 virtual bool suppress_multicast_join() const;
00127
00128 virtual void set_suppress_multicast_join( bool value = true );
00129
00133 virtual int multicast_hops();
00134
00138 virtual void set_multicast_hops( int hops );
00139
00140 static unsigned int default_multicast_hops();
00141
00142 static void set_default_multicast_hops(unsigned int hops);
00143
00147 virtual bool multicast_loopback();
00148
00152 virtual void set_multicast_loopback( bool loop );
00153
00154 static bool default_multicast_loopback();
00155
00156 static void set_default_multicast_loopback(bool loopback);
00157
00162
00163
00168
00169
00170
00171
00172 protected:
00173
00174 static unsigned int m_default_hops;
00175 static bool m_default_loopback;
00176
00177 bool m_write_without_connect;
00178 bool m_suppress_multicast_join;
00179 std::set<unsigned> m_multicast_interfaces;
00180
00181 virtual void on_local_address_changed( );
00182 virtual void on_remote_address_changed( );
00183
00189 virtual void join();
00190
00194 virtual void join(unsigned interface);
00195
00201 virtual void leave();
00202
00206 virtual void leave(unsigned interface);
00207
00212 virtual size_t write_data( const Data data, Timeout timeout ) throw ( write_exception );
00213 };
00214
00215 }
00216
00217 }
00218
00219 #endif