00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef CONEXUSLL_PACKET_H
00020 #define CONEXUSLL_PACKET_H
00021
00022 #include <conexus/socket.h>
00023 #include <conexus/ll_address.h>
00024
00036 namespace Conexus
00037 {
00038
00039 namespace LL
00040 {
00041
00046 class Packet : public Socket
00047 {
00048 public:
00049 typedef ConexusPointer<Packet> pointer;
00050
00051 Packet(int protocol=ETH_P_IP, int type=SOCK_DGRAM);
00052
00053 static Packet::pointer create(int protocol=ETH_P_IP, int type=SOCK_DGRAM);
00054
00055 virtual ~Packet() throw();
00056
00057 virtual void bind() throw (bind_exception);
00058 virtual void bind(Address& a) throw (bind_exception)
00059 {
00060 Socket::bind(a);
00061 }
00062
00063 void set_interface(int);
00064 void set_interface(const std::string);
00065
00066 int interface_index(const std::string name);
00067 std::string interface_name(int ifindex);
00068 std::vector<std::string> interface_names();
00069
00070 virtual ssize_t input_available();
00071
00072 virtual const std::string& object_type() { static std::string s("Conexus::LL::Packet"); return s; }
00073
00074 protected:
00075 Address m_address;
00076 int m_protocol;
00077
00078 virtual ssize_t write_data(long int timeout, Data::const_pointer data) throw (write_exception);
00079
00080 };
00081
00082 }
00083
00084 }
00085
00086 #endif