Class gateway : public tbb::filter

The filter class gateway (Example 11-47), in this simple example, only checks for FTP applications. If it is an FTP command, it looks at the application payload that would contain a command port somewhere. (In this packet trace input, all the rest of the packet has been thrown away.) The ALG modifies the mapped_ports_table to anticipate receiving FTP packets for this command port.

Example 11-47. Filter to check for specific (FTP) applications

class gateway : public tbb::filter { const ip_t outgoing_ip; const nic_t outgoing_nic; // port => address, // where port={router mapped port | home device port} // and // address = {home device port | pair(IP, router mapped port)} mapped_ports_table& mapped_ports; public: gateway (ip_t& _outgoing_ip, nic_t& _outgoing_nic, mapped_ports_table& _mapped_ports) : outgoing_ip(_outgoing_ip), outgoing_nic(_outgoing_nic), mapped_ports(_mapped_ports), filter (true /* is_serial*/) { } void* operator() (void* item) { packet_trace* packet = static_cast<packet_trace*> (item); if (packet->packetDestPort == FTPcmdPort) { // outbound packet sends FTP command // packetPayloadApp contains data port – // save it in ports table add_new_mapping (packet->packetSrcIp, packet->packetPayloadApp, packet->packetSrcPort); packet->packetSrcIp = outgoing_ip; packet->packetPayloadApp = packet->packetSrcPort; } return packet; } port_t& add_new_mapping (ip_t& ip, port_t& port, port_t& new_port) { port_number* mapped_port = new port_number (port); ...

Get Intel Threading Building Blocks now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.