#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 23 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.
00024 {
00025 if (Data const* data = static_cast<Data const*> (m->find (Data::id)))
00026 {
00027 size_t max_payload_size (
00028 params_.max_packet_size () - max_service_size);
00029
00030 if (data->size () <= max_payload_size)
00031 {
00032 u64 sn;
00033 {
00034 Lock l (mutex_);
00035 sn = sn_++;
00036 }
00037
00038 m->add (Profile_ptr (new SN (sn)));
00039
00040 out_->send (m);
00041 return;
00042 }
00043
00044 char const* p = data->buf ();
00045 size_t size (data->size ());
00046
00047 // Need fragmentation.
00048 //
00049 u32 packets (size / max_payload_size + (size % max_payload_size ? 1 : 0));
00050
00051 // cerr << "size : " << size << endl
00052 // << "packs: " << packets << endl;
00053
00054 for (u32 i (1); i <= packets; ++i)
00055 {
00056 Message_ptr part (new Message);
00057
00058 size_t s (i == packets ? size % max_payload_size : max_payload_size);
00059
00060 // cerr << "pack: " << s << endl;
00061
00062 u64 sn;
00063 {
00064 Lock l (mutex_);
00065 sn = sn_++;
00066 }
00067
00068 part->add (Profile_ptr (new SN (sn)));
00069 part->add (Profile_ptr (new Part (i, packets, size)));
00070 part->add (Profile_ptr (new Data (p, s)));
00071
00072 out_->send (part);
00073
00074 p += s;
00075 }
00076 }
00077 }
|
|
|
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