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
00030 namespace Conexus
00031 {
00032
00033 namespace LL
00034 {
00035
00040 class Packet : public Socket
00041 {
00042 public:
00043 typedef boost::shared_ptr<Packet> pointer;
00044
00045 Packet(int protocol=ETH_P_IP, int type=SOCK_DGRAM);
00046
00047 static Packet::pointer create(int protocol=ETH_P_IP, int type=SOCK_DGRAM);
00048
00049 virtual ~Packet() throw();
00050
00051 virtual void bind() throw (bind_error);
00052 virtual void bind(Address& a) throw (bind_error)
00053 {
00054 Socket::bind(a);
00055 }
00056
00057 virtual Data read() throw (read_error);
00058 virtual ssize_t write(const void* data, size_t size) throw (write_error);
00059
00060
00061 void set_interface(int);
00062 void set_interface(const std::string);
00063
00064 int interface_index(const std::string name);
00065 std::string interface_name(int ifindex);
00066 std::vector<std::string> interface_names();
00067
00068 virtual const std::string& object_type() { static std::string s("Conexus::LL::Packet"); return s; }
00069
00070 protected:
00071 Address m_address;
00072 int m_protocol;
00073
00074 };
00075
00076 }
00077
00078 }
00079
00080 #endif