7 #ifndef NDN_TRANSPORT_STREAM_TRANSPORT_HPP
8 #define NDN_TRANSPORT_STREAM_TRANSPORT_HPP
10 #include "../common.hpp"
16 template<
class BaseTransport,
class Protocol>
45 m_socket.async_send(boost::asio::buffer(i->wire(), i->size()),
48 for (std::list< std::pair<Block,Block> >::iterator i =
m_sendPairQueue.begin();
51 std::vector<boost::asio::const_buffer> buffer;
53 buffer.push_back(boost::asio::buffer(i->first.wire(), i->first.size()));
54 buffer.push_back(boost::asio::buffer(i->second.wire(), i->second.size()));
85 connect(
const typename protocol::endpoint& endpoint)
153 std::vector<boost::asio::const_buffer> buffers;
155 buffers.push_back(boost::asio::buffer(header.
wire(), header.
size()));
156 buffers.push_back(boost::asio::buffer(payload.
wire(), payload.
size()));
164 processAll(uint8_t* buffer,
size_t& offset,
size_t availableSize)
167 while(offset < availableSize)
174 offset += element.
size();
184 if (error == boost::system::errc::operation_canceled) {
197 std::size_t offset = 0;
206 "input buffer full, but a valid TLV cannot be decoded");
256 template<
class BaseTransport,
class Protocol>
271 typename protocol::resolver::iterator endpoint,
272 const shared_ptr<typename protocol::resolver>&)
276 if (error == boost::system::errc::operation_canceled)
282 typename protocol::resolver::iterator end;
292 this->
m_socket.async_connect(*endpoint,
297 connect(
const typename protocol::resolver::query& query)
304 this->
m_connectTimer.expires_from_now(boost::posix_time::seconds(4));
308 shared_ptr<typename protocol::resolver> resolver =
309 make_shared<typename protocol::resolver>(boost::ref(this->
m_socket.get_io_service()));
319 #endif // NDN_TRANSPORT_STREAM_TRANSPORT_HPP
void connectTimeoutHandler(const boost::system::error_code &error)
BaseTransport base_transport
std::list< Block > m_sendQueue
Class representing wire element of the NDN packet.
void send(const Block &wire)
StreamTransportImpl< BaseTransport, Protocol > impl
base_transport & m_transport
protocol::socket m_socket
StreamTransportImpl(base_transport &transport, boost::asio::io_service &ioService)
bool m_connectionInProgress
void resolveHandler(const boost::system::error_code &error, typename protocol::resolver::iterator endpoint, const shared_ptr< typename protocol::resolver > &)
bool processAll(uint8_t *buffer, size_t &offset, size_t availableSize)
void handle_async_send(const boost::system::error_code &error, const Block &header, const Block &payload)
const uint8_t * wire() const
void send(const Block &header, const Block &payload)
void connect(const typename protocol::resolver::query &query)
static bool fromBuffer(const ConstBufferPtr &wire, size_t offset, Block &block)
Try to construct block from Buffer, referencing data block pointed by wire.
boost::asio::deadline_timer m_connectTimer
void handle_async_send(const boost::system::error_code &error, const Block &wire)
uint8_t m_inputBuffer[MAX_LENGTH]
StreamTransportWithResolverImpl(base_transport &transport, boost::asio::io_service &ioService)
StreamTransportWithResolverImpl< BaseTransport, Protocol > impl
void handle_async_receive(const boost::system::error_code &error, std::size_t bytes_recvd)
void connectHandler(const boost::system::error_code &error)
BaseTransport base_transport
void connect(const typename protocol::endpoint &endpoint)
std::list< std::pair< Block, Block > > m_sendPairQueue