/* -*- C++ -*- */ /** * @file ECG_UDP_Protocol.h * * @brief Document the protocol to federate multiple Real-time Event * Channels via UDP. * * $Id$ * * @author Carlos O'Ryan * * http://doc.ece.uci.edu/~coryan/EC/index.html * */ #ifndef TAO_ECG_UDP_PROTOCOL_H #define TAO_ECG_UDP_PROTOCOL_H #include "ace/pre.h" #include "ace/config-all.h" /** * @class TAO_ECG_UDP_Protocol * * @brief Define the protocol parameters to federate TAO's Real-time * Event Service via UDP. * *

MESSAGE FORMAT

* The messages header are encapsulated using CDR, with the * following format: * * * struct Header { * octet byte_order_flags;
* // bit 0 represents the byte order as in GIOP 1.1
* // bit 1 is set if this is the last fragment
* unsigned long request_id;
* // The request ID, protocols must not send two requests with
* // the same ID, protocols can be distinguished using recvfrom..
* unsigned long request_size;
* // The size of this request, this can be used to pre-allocate
* // the request buffer.
* unsgined long fragment_size;
* // The size of this fragment, excluding the header...
* unsigned long fragment_offset;
* // Where does this fragment fit in the complete message...
* unsigned long fragment_id;
* // The ID of this fragment...
* unsigned long fragment_count;
* // The total number of fragments to expect in this request
*
* // @todo This could be eliminated if efficient reassembly
* // could be implemented without it.
* octet padding[4];
*
* // Ensures the header ends at an 8-byte boundary.
* }; // size (in CDR stream) = 32
* */ class TAO_RTEvent_Export TAO_ECG_UDP_Protocol { public: enum { ECG_HEADER_SIZE = 32, ECG_MIN_MTU = 32 + 8, ECG_MAX_MTU = 65536, // Really optimistic... ECG_DEFAULT_MTU = 1024 }; }; #include "ace/post.h" #endif /* TAO_ECG_UDP_PROTOCOL_H */