Public Types | Public Member Functions | Private Member Functions | Private Attributes
ros::Connection Class Reference

Encapsulates a connection to a remote host, independent of the transport type. More...

#include <connection.h>

List of all members.

Public Types

typedef boost::function< void(const
ConnectionPtr &, DropReason
reason)> 
DropFunc
enum  DropReason { TransportDisconnect, HeaderError, Destructing }
typedef boost::signal< void(const
ConnectionPtr &, DropReason
reason)> 
DropSignal

Public Member Functions

boost::signals::connection addDropListener (const DropFunc &slot)
 Add a callback to be called when this connection has dropped.
 Connection ()
void drop (DropReason reason)
 Drop this connection. Anything added as a drop listener through addDropListener will get called back when this connection has been dropped.
std::string getCallerId ()
HeadergetHeader ()
 Get the Header associated with this connection.
std::string getRemoteString ()
const TransportPtr & getTransport ()
 Get the Transport associated with this connection.
void initialize (const TransportPtr &transport, bool is_server, const HeaderReceivedFunc &header_func)
 Initialize this connection.
bool isDropped ()
 Returns whether or not this connection has been dropped.
bool isSendingHeaderError ()
 Returns true if we're currently sending a header error (and will be automatically dropped when it's finished)
void read (uint32_t size, const ReadFinishedFunc &finished_callback)
 Read a number of bytes, calling a callback when finished.
void removeDropListener (const boost::signals::connection &c)
void sendHeaderError (const std::string &error_message)
 Send a header error message, of the form "error=<message>". Drops the connection once the data has written successfully (or fails to write)
void setHeader (const Header &header)
 Set the Header associated with this connection (used with UDPROS, which receives the connection during XMLRPC negotiation).
void setHeaderReceivedCallback (const HeaderReceivedFunc &func)
 Set the header receipt callback.
void write (const boost::shared_array< uint8_t > &buffer, uint32_t size, const WriteFinishedFunc &finished_callback, bool immedate=true)
 Write a buffer of bytes, calling a callback when finished.
void writeHeader (const M_string &key_vals, const WriteFinishedFunc &finished_callback)
 Send a list of string key/value pairs as a header message.
 ~Connection ()

Private Member Functions

void onDisconnect (const TransportPtr &transport)
 Called by the Transport when it has been disconnected, either through a call to close() or through an error in the connection (such as a remote disconnect)
void onErrorHeaderWritten (const ConnectionPtr &conn)
void onHeaderLengthRead (const ConnectionPtr &conn, const boost::shared_array< uint8_t > &buffer, uint32_t size, bool success)
void onHeaderRead (const ConnectionPtr &conn, const boost::shared_array< uint8_t > &buffer, uint32_t size, bool success)
void onHeaderWritten (const ConnectionPtr &conn)
void onReadable (const TransportPtr &transport)
 Called by the Transport when there is data available to be read.
void onWriteable (const TransportPtr &transport)
 Called by the Transport when it is possible to write data.
void readTransport ()
 Read data off our transport. Also manages calling the read callback. If there is any data to be read, read() will read it until the fixed read buffer is filled.
void writeTransport ()
 Write data to our transport. Also manages calling the write callback.

Private Attributes

boost::recursive_mutex drop_mutex_
 Synchronizes drop() calls.
DropSignal drop_signal_
 Signal raised when this connection is dropped.
bool dropped_
 Have we dropped?
volatile uint32_t has_read_callback_
volatile uint32_t has_write_callback_
Header header_
 Incoming header.
HeaderReceivedFunc header_func_
 Function that handles the incoming header.
WriteFinishedFunc header_written_callback_
 Function to call when the outgoing header has finished writing.
bool is_server_
 Are we a server? Servers wait for clients to send a header and then send a header in response.
boost::shared_array< uint8_t > read_buffer_
 Read buffer that ends up being passed to the read callback.
ReadFinishedFunc read_callback_
 Function to call when the read is finished.
uint32_t read_filled_
 Amount of data currently in the read buffer, in bytes.
boost::recursive_mutex read_mutex_
 Mutex used for protecting reading. Recursive because a read can immediately cause another read through the callback.
uint32_t read_size_
 Size of the read buffer, in bytes.
bool reading_
 Flag telling us if we're in the middle of a read (mostly to avoid recursive deadlocking)
bool sending_header_error_
 If we're sending a header error we disable most other calls.
TransportPtr transport_
 Transport associated with us.
boost::shared_array< uint8_t > write_buffer_
 Buffer to write from.
WriteFinishedFunc write_callback_
 Function to call when the current write is finished.
boost::mutex write_callback_mutex_
boost::recursive_mutex write_mutex_
 Mutex used for protecting writing. Recursive because a write can immediately cause another write through the callback.
uint32_t write_sent_
 Amount of data we've written from the write buffer.
uint32_t write_size_
 Size of the write buffer.
bool writing_
 Flag telling us if we're in the middle of a write (mostly used to avoid recursive deadlocking)

Detailed Description

Encapsulates a connection to a remote host, independent of the transport type.

Connection provides automatic header negotiation, as well as easy ways of reading and writing arbitrary amounts of data without having to set up your own state machines.

Definition at line 69 of file connection.h.


Member Typedef Documentation

typedef boost::function<void(const ConnectionPtr&, DropReason reason)> ros::Connection::DropFunc

Definition at line 147 of file connection.h.

typedef boost::signal<void(const ConnectionPtr&, DropReason reason)> ros::Connection::DropSignal

Definition at line 146 of file connection.h.


Member Enumeration Documentation

Enumerator:
TransportDisconnect 
HeaderError 
Destructing 

Definition at line 72 of file connection.h.


Constructor & Destructor Documentation

Definition at line 47 of file connection.cpp.

Definition at line 62 of file connection.cpp.


Member Function Documentation

boost::signals::connection ros::Connection::addDropListener ( const DropFunc slot)

Add a callback to be called when this connection has dropped.

Definition at line 87 of file connection.cpp.

Drop this connection. Anything added as a drop listener through addDropListener will get called back when this connection has been dropped.

Definition at line 322 of file connection.cpp.

Definition at line 457 of file connection.cpp.

Get the Header associated with this connection.

Definition at line 166 of file connection.h.

Definition at line 468 of file connection.cpp.

const TransportPtr& ros::Connection::getTransport ( ) [inline]

Get the Transport associated with this connection.

Definition at line 162 of file connection.h.

void ros::Connection::initialize ( const TransportPtr &  transport,
bool  is_server,
const HeaderReceivedFunc &  header_func 
)

Initialize this connection.

Definition at line 69 of file connection.cpp.

Returns whether or not this connection has been dropped.

Definition at line 343 of file connection.cpp.

Returns true if we're currently sending a header error (and will be automatically dropped when it's finished)

Definition at line 100 of file connection.h.

void ros::Connection::onDisconnect ( const TransportPtr &  transport) [private]

Called by the Transport when it has been disconnected, either through a call to close() or through an error in the connection (such as a remote disconnect)

Definition at line 315 of file connection.cpp.

void ros::Connection::onErrorHeaderWritten ( const ConnectionPtr &  conn) [private]

Definition at line 444 of file connection.cpp.

void ros::Connection::onHeaderLengthRead ( const ConnectionPtr &  conn,
const boost::shared_array< uint8_t > &  buffer,
uint32_t  size,
bool  success 
) [private]

Definition at line 381 of file connection.cpp.

void ros::Connection::onHeaderRead ( const ConnectionPtr &  conn,
const boost::shared_array< uint8_t > &  buffer,
uint32_t  size,
bool  success 
) [private]

Definition at line 403 of file connection.cpp.

void ros::Connection::onHeaderWritten ( const ConnectionPtr &  conn) [private]

Definition at line 435 of file connection.cpp.

void ros::Connection::onReadable ( const TransportPtr &  transport) [private]

Called by the Transport when there is data available to be read.

Definition at line 99 of file connection.cpp.

void ros::Connection::onWriteable ( const TransportPtr &  transport) [private]

Called by the Transport when it is possible to write data.

Definition at line 255 of file connection.cpp.

void ros::Connection::read ( uint32_t  size,
const ReadFinishedFunc &  finished_callback 
)

Read a number of bytes, calling a callback when finished.

read() will not queue up multiple reads. Once read() has been called, it is not valid to call it again until the finished callback has been called. It is valid to call read() from within the finished callback.

The finished callback is of the form void(const ConnectionPtr&, const boost::shared_array<uint8_t>&, uint32_t)

Note:
The finished callback may be called from within this call to read() if the data has already arrived
Parameters:
sizeThe size, in bytes, of data to read
finished_callbackThe function to call when this read is finished

Definition at line 262 of file connection.cpp.

void ros::Connection::readTransport ( ) [private]

Read data off our transport. Also manages calling the read callback. If there is any data to be read, read() will read it until the fixed read buffer is filled.

Definition at line 106 of file connection.cpp.

void ros::Connection::removeDropListener ( const boost::signals::connection &  c)

Definition at line 93 of file connection.cpp.

void ros::Connection::sendHeaderError ( const std::string &  error_message)

Send a header error message, of the form "error=<message>". Drops the connection once the data has written successfully (or fails to write)

Parameters:
error_messageThe error message

Definition at line 372 of file connection.cpp.

void ros::Connection::setHeader ( const Header header) [inline]

Set the Header associated with this connection (used with UDPROS, which receives the connection during XMLRPC negotiation).

Definition at line 172 of file connection.h.

void ros::Connection::setHeaderReceivedCallback ( const HeaderReceivedFunc &  func)

Set the header receipt callback.

Definition at line 449 of file connection.cpp.

void ros::Connection::write ( const boost::shared_array< uint8_t > &  buffer,
uint32_t  size,
const WriteFinishedFunc &  finished_callback,
bool  immedate = true 
)

Write a buffer of bytes, calling a callback when finished.

write() will not queue up multiple writes. Once write() has been called, it is not valid to call it again until the finished callback has been called. It is valid to call write() from within the finished callback.

* The finished callback is of the form void(const ConnectionPtr&)

Note:
The finished callback may be called from within this call to write() if the data can be written immediately
Parameters:
bufferThe buffer of data to write
sizeThe size of the buffer, in bytes
finished_callbackThe function to call when the write has finished
immediateWhether to immediately try to write as much data as possible to the socket or to pass the data off to the server thread

Definition at line 287 of file connection.cpp.

void ros::Connection::writeHeader ( const M_string &  key_vals,
const WriteFinishedFunc &  finished_callback 
)

Send a list of string key/value pairs as a header message.

Parameters:
key_valsThe values to send. Neither keys nor values can have any newlines in them
finished_callbackThe function to call when the header has finished writing

Definition at line 349 of file connection.cpp.

void ros::Connection::writeTransport ( ) [private]

Write data to our transport. Also manages calling the write callback.

Definition at line 191 of file connection.cpp.


Member Data Documentation

boost::recursive_mutex ros::Connection::drop_mutex_ [private]

Synchronizes drop() calls.

Definition at line 261 of file connection.h.

Signal raised when this connection is dropped.

Definition at line 258 of file connection.h.

bool ros::Connection::dropped_ [private]

Have we dropped?

Definition at line 211 of file connection.h.

volatile uint32_t ros::Connection::has_read_callback_ [private]

flag telling us if there is a read callback 32-bit loads and stores are atomic on x86 and PPC... TODO: use a cross-platform atomic operations library to ensure this is done atomically

Definition at line 234 of file connection.h.

volatile uint32_t ros::Connection::has_write_callback_ [private]

flag telling us if there is a write callback 32-bit loads and stores are atomic on x86 and PPC... TODO: use a cross-platform atomic operations library to ensure this is done atomically

Definition at line 252 of file connection.h.

Incoming header.

Definition at line 213 of file connection.h.

HeaderReceivedFunc ros::Connection::header_func_ [private]

Function that handles the incoming header.

Definition at line 217 of file connection.h.

WriteFinishedFunc ros::Connection::header_written_callback_ [private]

Function to call when the outgoing header has finished writing.

Definition at line 255 of file connection.h.

Are we a server? Servers wait for clients to send a header and then send a header in response.

Definition at line 209 of file connection.h.

boost::shared_array<uint8_t> ros::Connection::read_buffer_ [private]

Read buffer that ends up being passed to the read callback.

Definition at line 220 of file connection.h.

ReadFinishedFunc ros::Connection::read_callback_ [private]

Function to call when the read is finished.

Definition at line 226 of file connection.h.

uint32_t ros::Connection::read_filled_ [private]

Amount of data currently in the read buffer, in bytes.

Definition at line 222 of file connection.h.

boost::recursive_mutex ros::Connection::read_mutex_ [private]

Mutex used for protecting reading. Recursive because a read can immediately cause another read through the callback.

Definition at line 228 of file connection.h.

uint32_t ros::Connection::read_size_ [private]

Size of the read buffer, in bytes.

Definition at line 224 of file connection.h.

bool ros::Connection::reading_ [private]

Flag telling us if we're in the middle of a read (mostly to avoid recursive deadlocking)

Definition at line 230 of file connection.h.

If we're sending a header error we disable most other calls.

Definition at line 264 of file connection.h.

TransportPtr ros::Connection::transport_ [private]

Transport associated with us.

Definition at line 215 of file connection.h.

boost::shared_array<uint8_t> ros::Connection::write_buffer_ [private]

Buffer to write from.

Definition at line 237 of file connection.h.

WriteFinishedFunc ros::Connection::write_callback_ [private]

Function to call when the current write is finished.

Definition at line 243 of file connection.h.

Definition at line 244 of file connection.h.

boost::recursive_mutex ros::Connection::write_mutex_ [private]

Mutex used for protecting writing. Recursive because a write can immediately cause another write through the callback.

Definition at line 246 of file connection.h.

uint32_t ros::Connection::write_sent_ [private]

Amount of data we've written from the write buffer.

Definition at line 239 of file connection.h.

uint32_t ros::Connection::write_size_ [private]

Size of the write buffer.

Definition at line 241 of file connection.h.

bool ros::Connection::writing_ [private]

Flag telling us if we're in the middle of a write (mostly used to avoid recursive deadlocking)

Definition at line 248 of file connection.h.


The documentation for this class was generated from the following files:


roscpp
Author(s): Morgan Quigley mquigley@cs.stanford.edu, Josh Faust jfaust@willowgarage.com, Brian Gerkey gerkey@willowgarage.com, Troy Straszheim straszheim@willowgarage.com
autogenerated on Sat Dec 28 2013 17:35:53