#include <TCPConvergenceLayer.h>

Public Member Functions | |
| TCPConvergenceLayer (string localeid, string bind_addr, unsigned short port) | |
| virtual | ~TCPConvergenceLayer () |
| virtual TransmitReport | transmit (const Bundle &b) |
| virtual TransmitReport | transmit (const Bundle &b, const Node &node) |
| virtual void | tick () |
Protected Member Functions | |
| void | callbackBundleReceived (const TCPConnection &conn, Bundle &b) |
Private Member Functions | |
| TransmitReport | transmit (TCPConnection *conn, const Bundle &b) |
| TCPConnection * | newConnection (int socket) |
| bool | build_select_list () |
| void | setnonblocking (int sock) |
Private Attributes | |
| int | m_socket |
| string | m_selfaddr |
| unsigned int | m_selfport |
| Mutex | m_writelock |
| Mutex | m_mutex_connections |
| list< TCPConnection * > | m_connections |
| fd_set | m_socks_recv |
| fd_set | m_socks_send |
| int | m_highsock |
| NetworkFrame | m_contactheader |
| string | m_localeid |
Static Private Attributes | |
| static const int | DEFAULT_PORT = 4556 |
Friends | |
| class | TCPConnection |
| dtn::core::TCPConvergenceLayer::TCPConvergenceLayer | ( | string | localeid, | |
| string | bind_addr, | |||
| unsigned short | port | |||
| ) |
Constructor
| bind_addr | The IP address to listen on for the TCP communication. | |
| port | The port to listen on for the TCP communication. |
create the contact header
magic = 4 byte version = 1 byte flags = 1 byte keepalive_interval = 2 byte eid length = SDNV eid = eid length
header complete
References dtn::data::NetworkFrame::append(), m_connections, m_contactheader, m_localeid, m_socket, and setnonblocking().
| dtn::core::TCPConvergenceLayer::~TCPConvergenceLayer | ( | ) | [virtual] |
Destructor
References m_connections, m_mutex_connections, and m_socket.
| TransmitReport dtn::core::TCPConvergenceLayer::transmit | ( | const Bundle & | b | ) | [virtual] |
Implements dtn::core::ConvergenceLayer.
References dtn::core::NO_ROUTE_FOUND.
Referenced by transmit().
| TransmitReport dtn::core::TCPConvergenceLayer::transmit | ( | const Bundle & | b, | |
| const Node & | node | |||
| ) | [virtual] |
Implements dtn::core::ConvergenceLayer.
References dtn::core::CONVERGENCE_LAYER_BUSY, dtn::core::Node::getAddress(), dtn::core::Node::getPort(), dtn::core::Node::getURI(), dtn::utils::Service::isRunning(), m_connections, m_mutex_connections, newConnection(), transmit(), and dtn::utils::MutexLock::unlock().
| void dtn::core::TCPConvergenceLayer::tick | ( | ) | [virtual] |
Implements dtn::utils::Service.
References build_select_list(), dtn::core::TCPConnection::getSocket(), dtn::utils::Service::isRunning(), m_connections, m_highsock, m_mutex_connections, m_socket, m_socks_recv, m_socks_send, newConnection(), dtn::core::TCPConnection::receive(), and dtn::core::TCPConnection::transmit().
| void dtn::core::TCPConvergenceLayer::callbackBundleReceived | ( | const TCPConnection & | conn, | |
| Bundle & | b | |||
| ) | [protected] |
References dtn::core::ConvergenceLayer::eventBundleReceived().
Referenced by dtn::core::TCPConnection::receive().
| TransmitReport dtn::core::TCPConvergenceLayer::transmit | ( | TCPConnection * | conn, | |
| const Bundle & | b | |||
| ) | [private] |
reactive fragmentation
fragmentation on both sides is only possible if the complete header is transferred. check this in first!
References dtn::core::CONVERGENCE_LAYER_BUSY, dtn::data::Bundle::getData(), dtn::data::Bundle::getLength(), dtn::core::TCPConnection::transmit(), and dtn::core::TRANSMIT_SUCCESSFUL.
| TCPConnection * dtn::core::TCPConvergenceLayer::newConnection | ( | int | socket | ) | [private] |
References dtn::data::NetworkFrame::getData(), dtn::data::NetworkFrame::getSize(), dtn::core::TCPConnection::handshake(), m_connections, m_contactheader, m_highsock, m_mutex_connections, setnonblocking(), and TCPConnection.
Referenced by tick(), and transmit().
| bool dtn::core::TCPConvergenceLayer::build_select_list | ( | ) | [private] |
Build the list of waiting sockets
References dtn::core::TCPConnection::datawaiting(), dtn::core::TCPConnection::getRemoteURI(), dtn::core::TCPConnection::getSocket(), dtn::core::TCPConnection::idlechecking(), dtn::core::TCPConnection::isClosed(), m_connections, m_mutex_connections, m_socket, m_socks_recv, and m_socks_send.
Referenced by tick().
| void dtn::core::TCPConvergenceLayer::setnonblocking | ( | int | sock | ) | [private] |
Referenced by newConnection(), and TCPConvergenceLayer().
friend class TCPConnection [friend] |
Referenced by newConnection().
int dtn::core::TCPConvergenceLayer::m_socket [private] |
Referenced by build_select_list(), TCPConvergenceLayer(), tick(), and ~TCPConvergenceLayer().
const int dtn::core::TCPConvergenceLayer::DEFAULT_PORT = 4556 [static, private] |
string dtn::core::TCPConvergenceLayer::m_selfaddr [private] |
unsigned int dtn::core::TCPConvergenceLayer::m_selfport [private] |
Referenced by build_select_list(), newConnection(), tick(), transmit(), and ~TCPConvergenceLayer().
list<TCPConnection*> dtn::core::TCPConvergenceLayer::m_connections [private] |
Referenced by build_select_list(), newConnection(), TCPConvergenceLayer(), tick(), transmit(), and ~TCPConvergenceLayer().
fd_set dtn::core::TCPConvergenceLayer::m_socks_recv [private] |
Referenced by build_select_list(), and tick().
fd_set dtn::core::TCPConvergenceLayer::m_socks_send [private] |
Referenced by build_select_list(), and tick().
int dtn::core::TCPConvergenceLayer::m_highsock [private] |
Referenced by newConnection(), and tick().
Referenced by newConnection(), and TCPConvergenceLayer().
string dtn::core::TCPConvergenceLayer::m_localeid [private] |
Referenced by TCPConvergenceLayer().
1.5.6