#include <Fragment.h>
Inheritance diagram for ACE_RMCast::Fragment:


Public Member Functions | |
| Fragment (Parameters const ¶ms) | |
| virtual void | send (Message_ptr m) |
Public Attributes | |
| Parameters const & | params_ |
Private Attributes | |
| Mutex | mutex_ |
| u64 | sn_ |
|
|
Definition at line 16 of file Fragment.cpp.
|
|
|
Reimplemented from ACE_RMCast::Out_Element. Definition at line 22 of file Fragment.cpp. References ACE_RMCast::Data::buf(), ACE_RMCast::Lock, ACE_RMCast::Parameters::max_packet_size(), ACE_RMCast::max_service_size, ACE_RMCast::Message_ptr, ACE_RMCast::Profile_ptr, ACE_RMCast::Data::size(), ACE_RMCast::u32, and ACE_RMCast::u64.
00023 {
00024 if (Data const* data = static_cast<Data const*> (m->find (Data::id)))
00025 {
00026 size_t max_payload_size (
00027 params_.max_packet_size () - max_service_size);
00028
00029 if (data->size () <= max_payload_size)
00030 {
00031 u64 sn;
00032 {
00033 Lock l (mutex_);
00034 sn = sn_++;
00035 }
00036
00037 m->add (Profile_ptr (new SN (sn)));
00038
00039 out_->send (m);
00040 return;
00041 }
00042
00043 char const* p = data->buf ();
00044 size_t size (data->size ());
00045
00046 // Need fragmentation.
00047 //
00048 u32 packets (size / max_payload_size + (size % max_payload_size ? 1 : 0));
00049
00050 // cerr << "size : " << size << endl
00051 // << "packs: " << packets << endl;
00052
00053 for (u32 i (1); i <= packets; ++i)
00054 {
00055 Message_ptr part (new Message);
00056
00057 size_t s (i == packets ? size % max_payload_size : max_payload_size);
00058
00059 // cerr << "pack: " << s << endl;
00060
00061 u64 sn;
00062 {
00063 Lock l (mutex_);
00064 sn = sn_++;
00065 }
00066
00067 part->add (Profile_ptr (new SN (sn)));
00068 part->add (Profile_ptr (new Part (i, packets, size)));
00069 part->add (Profile_ptr (new Data (p, s)));
00070
00071 out_->send (part);
00072
00073 p += s;
00074 }
00075 }
00076 }
|
|
|
Definition at line 27 of file Fragment.h. |
|
|
Definition at line 24 of file Fragment.h. |
|
|
Definition at line 28 of file Fragment.h. |
1.3.6