#include <TCPConnection.h>
Public Member Functions | |
| TCPConnection (TCPConvergenceLayer &clayer, int socket, size_t chunksize=128) | |
| ~TCPConnection () | |
| string | getRemoteURI () |
| bool | isClosed () |
| TCPConnectionState | getState () |
| bool | waitForState (TCPConnectionState state) |
Protected Member Functions | |
| unsigned int | transmit (char *data, unsigned int size) |
| bool | datawaiting () |
| void | transmit () |
| void | receive () |
| int | getSocket () |
| void | handshake (unsigned char *data, unsigned int size) |
| void | idlechecking () |
Private Member Functions | |
| void | disconnect () |
| void | setState (TCPConnectionState state) |
| void | setState (TCPConnectionData &data, TCPConnectionState state) |
| TCPConnectionState | getState (TCPConnectionData &data) |
| bool | waitForState (TCPConnectionData &data, TCPConnectionState state) |
Private Attributes | |
| int | m_socket |
| TCPConvergenceLayer & | m_clayer |
| string | m_eid |
| TCPConnectionData | m_incoming |
| TCPConnectionData | m_outgoing |
| Mutex | m_mutex_state |
| TCPConnectionState | m_state |
| Conditional | m_cond_state |
| size_t | m_chunksize |
Friends | |
| class | TCPConvergenceLayer |
| dtn::core::TCPConnection::TCPConnection | ( | TCPConvergenceLayer & | clayer, | |
| int | socket, | |||
| size_t | chunksize = 128 | |||
| ) |
Constructor
| [in] | clayer | The parent TCPConvergenceLayer which this Connection belongs to. |
| [in] | socket | The socket to work with. |
| [in] | chunksize | The default chunk size for data transmission. |
References dtn::core::TCPConnectionData::ackdata, dtn::core::TCPConnectionData::data, dtn::core::TCPConnectionData::idletime, dtn::core::TCPConnectionData::length, m_incoming, m_outgoing, dtn::core::TCPConnectionData::outbound, dtn::core::TCPConnectionData::position, dtn::core::TCPConnectionData::remain, dtn::core::TCPConnectionData::state, and dtn::core::STATE_INITIAL.
| dtn::core::TCPConnection::~TCPConnection | ( | ) |
Destructor
References disconnect().
| string dtn::core::TCPConnection::getRemoteURI | ( | ) |
| bool dtn::core::TCPConnection::isClosed | ( | ) |
returns true if the connection is closed
References getState(), and dtn::core::STATE_CLOSED.
Referenced by dtn::core::TCPConvergenceLayer::build_select_list(), and transmit().
| TCPConnectionState dtn::core::TCPConnection::getState | ( | ) |
References m_mutex_state, and m_state.
Referenced by datawaiting(), disconnect(), getRemoteURI(), handshake(), idlechecking(), isClosed(), receive(), setState(), transmit(), and waitForState().
| bool dtn::core::TCPConnection::waitForState | ( | TCPConnectionState | state | ) |
References getState(), m_cond_state, dtn::core::STATE_CLOSED, and dtn::utils::Conditional::wait().
Referenced by handshake(), and transmit().
| unsigned int dtn::core::TCPConnection::transmit | ( | char * | data, | |
| unsigned int | size | |||
| ) | [protected] |
transmit some data and block while transmitting
now cut the data into pieces of {chunksize} each one get a header in front
References dtn::core::CONVERGENCE_LAYER_BUSY, dtn::core::TCPConnectionData::data, dtn::core::TCPMessage::getData(), dtn::core::TCPMessage::getSize(), isClosed(), dtn::core::TCPConnectionData::length, m_chunksize, m_outgoing, dtn::core::TCPConnectionData::mutex, dtn::core::TCPConnectionData::position, dtn::core::TCPConnectionData::remain, dtn::core::TCPMessage::setFirst(), dtn::core::TCPMessage::setLast(), setState(), dtn::core::STATE_IDLE, dtn::core::STATE_TRANSFER_COMPLETE, dtn::core::STATE_TRANSMITTING, dtn::utils::MutexLock::unlock(), and waitForState().
Referenced by dtn::core::TCPConvergenceLayer::tick(), and dtn::core::TCPConvergenceLayer::transmit().
| bool dtn::core::TCPConnection::datawaiting | ( | ) | [protected] |
this function returns true if there is data to send
References getState(), m_outgoing, dtn::core::STATE_HANDSHAKE, and dtn::core::STATE_TRANSMITTING.
Referenced by dtn::core::TCPConvergenceLayer::build_select_list().
| void dtn::core::TCPConnection::transmit | ( | ) | [protected] |
transmit waiting data
References dtn::core::TCPConnectionData::data, disconnect(), getState(), m_outgoing, m_socket, dtn::core::TCPConnectionData::mutex, dtn::core::TCPConnectionData::position, dtn::core::TCPConnectionData::remain, setState(), dtn::core::STATE_HANDSHAKE, dtn::core::STATE_IDLE, dtn::core::STATE_TRANSFER_COMPLETE, and dtn::core::STATE_TRANSMITTING.
| void dtn::core::TCPConnection::receive | ( | ) | [protected] |
receive waiting data
receive the contact header
magic = 4 byte version = 1 byte flags = 1 byte keepalive_interval = 2 byte eid length = SDNV eid = eid length
read the header
MSG_TYPE = 1/2 byte (TCPMessageHeaderType) start/end = 1/2 byte 1 = end 2 = start 3 = start + end length = 1 byte
References dtn::core::TCPConvergenceLayer::callbackBundleReceived(), dtn::core::TCPConnectionData::data, disconnect(), getState(), dtn::core::TCPConnectionData::idletime, dtn::core::TCPConnectionData::keepalive, dtn::core::TCPConnectionData::last, dtn::core::TCPConnectionData::length, m_clayer, m_eid, m_incoming, m_socket, dtn::core::MSG_ACK_SEGMENT, dtn::core::MSG_DATA_SEGMENT, dtn::core::MSG_KEEPALIVE, dtn::core::MSG_REFUSE_BUNDLE, dtn::core::MSG_SHUTDOWN, dtn::core::TCPConnectionData::mutex, dtn::data::BundleFactory::parse(), dtn::core::TCPConnectionData::position, dtn::core::TCPConnectionData::remain, setState(), dtn::core::STATE_CLOSED, dtn::core::STATE_HANDSHAKE, dtn::core::STATE_IDLE, dtn::core::STATE_INITIAL, dtn::core::STATE_MESSAGE, dtn::core::STATE_TRANSFER_COMPLETE, and dtn::core::STATE_TRANSMITTING.
Referenced by dtn::core::TCPConvergenceLayer::tick().
| int dtn::core::TCPConnection::getSocket | ( | ) | [protected] |
References m_socket.
Referenced by dtn::core::TCPConvergenceLayer::build_select_list(), and dtn::core::TCPConvergenceLayer::tick().
| void dtn::core::TCPConnection::handshake | ( | unsigned char * | data, | |
| unsigned int | size | |||
| ) | [protected] |
send the contact header
References dtn::core::TCPConnectionData::data, getState(), dtn::core::TCPConnectionData::length, m_outgoing, dtn::core::TCPConnectionData::mutex, dtn::core::TCPConnectionData::position, dtn::core::TCPConnectionData::remain, setState(), dtn::core::STATE_HANDSHAKE, dtn::core::STATE_IDLE, dtn::core::STATE_INITIAL, and waitForState().
Referenced by dtn::core::TCPConvergenceLayer::newConnection().
| void dtn::core::TCPConnection::idlechecking | ( | ) | [protected] |
checks for idled connections
References getState(), dtn::core::TCPConnectionData::idletime, dtn::core::TCPConnectionData::keepalive, m_incoming, m_outgoing, and dtn::core::STATE_IDLE.
Referenced by dtn::core::TCPConvergenceLayer::build_select_list().
| void dtn::core::TCPConnection::disconnect | ( | ) | [private] |
References dtn::core::TCPConnectionData::data, getState(), m_eid, m_outgoing, setState(), and dtn::core::STATE_CLOSED.
Referenced by receive(), transmit(), and ~TCPConnection().
| void dtn::core::TCPConnection::setState | ( | TCPConnectionState | state | ) | [private] |
References m_cond_state, m_mutex_state, m_state, and dtn::utils::Conditional::signal().
Referenced by disconnect(), handshake(), receive(), setState(), and transmit().
| void dtn::core::TCPConnection::setState | ( | TCPConnectionData & | data, | |
| TCPConnectionState | state | |||
| ) | [private] |
References getState(), m_incoming, m_outgoing, dtn::core::TCPConnectionData::mutex_state, dtn::core::TCPConnectionData::outbound, setState(), dtn::utils::Conditional::signal(), dtn::core::TCPConnectionData::state, dtn::core::TCPConnectionData::state_cond, dtn::core::STATE_IDLE, and dtn::core::STATE_TRANSMITTING.
| TCPConnectionState dtn::core::TCPConnection::getState | ( | TCPConnectionData & | data | ) | [private] |
| bool dtn::core::TCPConnection::waitForState | ( | TCPConnectionData & | data, | |
| TCPConnectionState | state | |||
| ) | [private] |
friend class TCPConvergenceLayer [friend] |
int dtn::core::TCPConnection::m_socket [private] |
Referenced by getSocket(), receive(), and transmit().
Referenced by receive().
string dtn::core::TCPConnection::m_eid [private] |
Referenced by disconnect(), getRemoteURI(), and receive().
Referenced by idlechecking(), receive(), setState(), and TCPConnection().
Referenced by datawaiting(), disconnect(), handshake(), idlechecking(), setState(), TCPConnection(), and transmit().
Mutex dtn::core::TCPConnection::m_mutex_state [private] |
Referenced by getState(), and setState().
Referenced by getState(), and setState().
Referenced by getRemoteURI(), setState(), and waitForState().
size_t dtn::core::TCPConnection::m_chunksize [private] |
Referenced by transmit().
1.5.6