22 #ifndef TCPCONNECTION_H_
23 #define TCPCONNECTION_H_
35 #include <ibrcommon/net/socket.h>
36 #include <ibrcommon/net/socketstream.h>
37 #include <ibrcommon/thread/Queue.h>
38 #include <ibrcommon/thread/SharedReference.h>
46 class TCPConvergenceLayer;
50 const static std::string TAG;
128 void setup()
throw ();
131 void finally()
throw ();
142 class KeepaliveSender :
public ibrcommon::JoinableThread
145 KeepaliveSender(
TCPConnection &connection,
size_t &keepalive_timeout);
159 ibrcommon::Conditional _wait;
161 size_t &_keepalive_timeout;
164 class Sender :
public ibrcommon::JoinableThread,
public ibrcommon::Queue<dtn::net::BundleTransfer>
172 void finally()
throw ();
179 void __setup_socket(ibrcommon::clientsocket *sock,
bool server);
182 typedef ibrcommon::SharedReference<dtn::streams::StreamConnection> safe_streamconnection;
188 safe_streamconnection getProtocolStream()
throw (ibrcommon::Exception);
193 ibrcommon::clientsocket *_socket;
195 ibrcommon::socketstream *_socket_stream;
198 std::iostream *_sec_stream;
201 ibrcommon::RWMutex _protocol_stream_mutex;
211 KeepaliveSender _keepalive_sender;
216 ibrcommon::Queue<dtn::net::BundleTransfer> _sentqueue;
219 size_t _keepalive_timeout;
void initiateExtendedHandshake()
dtn::core::Node::Protocol getDiscoveryProtocol() const
const dtn::core::Node & getNode() const
bool match(const dtn::core::Node &n) const
virtual void eventTimeout()
virtual void addTrafficIn(size_t)
virtual void eventBundleForwarded()
void queue(const dtn::net::BundleTransfer &job)
virtual void eventBundleRefused()
virtual void addTrafficOut(size_t)
virtual void eventConnectionDown()
virtual void initialize()
void rejectTransmission()
virtual void eventShutdown(dtn::streams::StreamConnection::ConnectionShutdownCases csc)
virtual void eventConnectionUp(const dtn::streams::StreamContactHeader &header)
const dtn::streams::StreamContactHeader & getHeader() const
virtual void eventBundleAck(const dtn::data::Length &ack)
virtual void eventError()
TCPConnection(TCPConvergenceLayer &tcpsrv, const dtn::core::Node &node, ibrcommon::clientsocket *sock, const size_t timeout=10)