41class EXPCL_PANDA_NET ConnectionManager {
44 virtual ~ConnectionManager();
46 PT(Connection) open_UDP_connection(uint16_t port = 0);
47 PT(Connection) open_UDP_connection(
const std::string &hostname, uint16_t port,
bool for_broadcast =
false);
49 BLOCKING PT(Connection) open_TCP_server_rendezvous(uint16_t port,
int backlog);
50 BLOCKING PT(Connection) open_TCP_server_rendezvous(
const std::string &hostname,
51 uint16_t port,
int backlog);
52 BLOCKING PT(Connection) open_TCP_server_rendezvous(
const NetAddress &address,
54 BLOCKING PT(Connection) open_TCP_client_connection(
const NetAddress &address,
56 BLOCKING PT(Connection) open_TCP_client_connection(
const std::string &hostname,
57 uint16_t port,
int timeout_ms);
64 class EXPCL_PANDA_NET Interface {
66 const std::string &get_name()
const {
return _name; }
67 const std::string &get_mac_address()
const {
return _mac_address; }
68 bool has_ip()
const {
return (_flags & F_has_ip) != 0; }
69 const NetAddress &get_ip()
const {
return _ip; }
70 bool has_netmask()
const {
return (_flags & F_has_netmask) != 0; }
71 const NetAddress &get_netmask()
const {
return _netmask; }
72 bool has_broadcast()
const {
return (_flags & F_has_broadcast) != 0; }
73 const NetAddress &get_broadcast()
const {
return _broadcast; }
74 bool has_p2p()
const {
return (_flags & F_has_p2p) != 0; }
75 const NetAddress &get_p2p()
const {
return _p2p; }
77 void output(std::ostream &out)
const;
80 Interface() { _flags = 0; }
81 void set_name(
const std::string &name) { _name = name; }
82 void set_mac_address(
const std::string &mac_address) { _mac_address = mac_address; }
83 void set_ip(
const NetAddress &ip) { _ip = ip; _flags |= F_has_ip; }
84 void set_netmask(
const NetAddress &ip) { _netmask = ip; _flags |= F_has_netmask; }
85 void set_broadcast(
const NetAddress &ip) { _broadcast = ip; _flags |= F_has_broadcast; }
86 void set_p2p(
const NetAddress &ip) { _p2p = ip; _flags |= F_has_p2p; }
90 std::string _mac_address;
100 F_has_netmask = 0x002,
101 F_has_broadcast = 0x004,
115 void new_connection(
const PT(Connection) &connection);
116 virtual void flush_read_connection(Connection *connection);
117 virtual void connection_reset(
const PT(Connection) &connection,
120 void add_reader(ConnectionReader *reader);
121 void remove_reader(ConnectionReader *reader);
122 void add_writer(ConnectionWriter *writer);
123 void remove_writer(ConnectionWriter *writer);
125 std::string format_mac_address(
const unsigned char *data,
size_t data_size);
127 typedef phash_set< PT(Connection) > Connections;
128 typedef phash_set<ConnectionReader *, pointer_hash> Readers;
129 typedef phash_set<ConnectionWriter *, pointer_hash> Writers;
130 Connections _connections;
135 typedef pvector<Interface> Interfaces;
136 Interfaces _interfaces;
137 bool _interfaces_scanned;
140 friend class ConnectionReader;
141 friend class ConnectionWriter;
142 friend class ConnectionListener;
143 friend class Connection;