int Sender::svc () { if (this->fragment_.next (&this->io_udp_) != 0) ACE_ERROR ((LM_ERROR, ACE_TEXT ("Error in Fragment::next()\n"))); if (this->io_udp_.subscribe (this->mcast_group_) != 0) ACE_ERROR ((LM_ERROR, ACE_TEXT ("Error in IO_UDP::subscribe()\n"))); ACE_Message_Block big_blob (message_size); big_blob.wr_ptr (message_size); char filler = 0; for (char* j = big_blob.rd_ptr (); j != big_blob.wr_ptr (); ++j) { *j = filler++; } for (int i = 0; i != total_message_count; ++i) { ACE_RMCast::Data data; data.sequence_number = i; data.payload = &big_blob; this->fragment_.data (data); } return 0; }
int ACE_RMCast_Reassembly_Tester::svc (void) { for (int iteration = 0; iteration != 50; ++iteration) { ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%t) iteration %d\n"), iteration)); ACE_UINT32 sequence_number = this->next_sequence_number (); { ACE_Message_Block received; const size_t fragment_size = 128; ACE_UINT32 n = 32 * fragment_size; ACE_Message_Block big_blob (n); big_blob.wr_ptr (n); this->initialize (&big_blob); // Use an ACT to store the results in <received> ACE_Message_Block *received_pointer = &received; ACE_OS::memcpy (big_blob.rd_ptr (), &received_pointer, sizeof(received_pointer)); for (size_t offset = 0; offset < n; offset += fragment_size) { if (this->put_fragment (sequence_number, offset, fragment_size, &big_blob) == -1) { ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Error in put_fragment\n"))); return -1; } } if (this->compare (&received, &big_blob) == -1) { ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("Mismatched big_blob data\n")), -1); } } ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%t) iteration %d, first test passed\n"), iteration)); sequence_number = this->next_sequence_number (); { ACE_Message_Block received; const size_t fragment_size = 128; ACE_UINT32 n = 32 * fragment_size; ACE_Message_Block big_blob (n); big_blob.wr_ptr (n); this->initialize (&big_blob); // Use an ACT to store the results in <received> ACE_Message_Block *received_pointer = &received; ACE_OS::memcpy (big_blob.rd_ptr (), &received_pointer, sizeof(received_pointer)); ACE_RANDR_TYPE seed = ACE_static_cast(ACE_RANDR_TYPE, ACE_OS::time (0)); for (int i = 0; i != 100; ++i) { size_t offset = ACE_OS::rand_r (seed) % n; if (offset >= n) { offset = n/2; } if (this->put_fragment (sequence_number, offset, fragment_size, &big_blob) == -1) { ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Error in put_fragment\n"))); return -1; } } for (size_t offset = 0; offset < n; offset += fragment_size) { if (this->put_fragment (sequence_number, offset, fragment_size, &big_blob) == -1) { ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Error in put_fragment\n"))); return -1; } } if (this->compare (&received, &big_blob) == -1) { ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("Mismatched random big_blob data\n")), -1); } } ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%t) iteration %d, random test passed\n"), iteration)); } return 0; }
int ACE_RMCast_Fragment_Tester::svc (void) { { this->received_.wr_ptr (this->received_.rd_ptr ()); this->received_bytes_ = 0; this->message_sequence_number_ = 0; ACE_UINT32 n = 128 * 1024; ACE_Message_Block big_blob (n); big_blob.wr_ptr (n); this->initialize (&big_blob); ACE_RMCast::Data data; data.payload = &big_blob; if (this->fragment_.data (data) == -1) return -1; if (this->received_bytes_ != n) ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("Unexpected number of ") ACE_TEXT ("received bytes (%d/%d)\n"), this->received_bytes_, n), -1); if (this->compare (&big_blob) == -1) { ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("Mismatched big_blob data\n")), -1); } } { this->received_.wr_ptr (this->received_.rd_ptr ()); this->received_bytes_ = 0; this->message_sequence_number_ = 0; const int n = 256; const int size = 512; ACE_Message_Block smallb[n]; smallb[0].size (size); smallb[0].wr_ptr (size); for (int i = 1; i != n; ++i) { smallb[i].size (size); smallb[i].wr_ptr (size); smallb[i - 1].cont (&smallb[i]); } this->initialize (smallb); ACE_RMCast::Data data; data.payload = smallb; if (this->fragment_.data (data) == -1) return -1; ACE_UINT32 total = n * size; if (this->received_bytes_ != total) ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("Unexpected number of ") ACE_TEXT ("received bytes (%d/%d)\n"), this->received_bytes_, total), -1); if (this->compare (smallb) == -1) { ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("Mismatched smallb chain data\n")), -1); } } { this->received_.wr_ptr (this->received_.rd_ptr ()); this->received_bytes_ = 0; this->message_sequence_number_ = 0; const int n = 256; ACE_UINT32 total = 0; ACE_RANDR_TYPE seed = ACE_static_cast(ACE_RANDR_TYPE,ACE_OS::time (0)); int size = 64 + ACE_OS::rand_r(seed) % 128; ACE_Message_Block smallb[n]; smallb[0].size (size); smallb[0].wr_ptr (size); total += size; for (int i = 1; i != n; ++i) { size = 64 + ACE_OS::rand_r(seed) % 128; total += size; smallb[i].size (size); smallb[i].wr_ptr (size); smallb[i - 1].cont (&smallb[i]); } this->initialize (smallb); ACE_RMCast::Data data; data.payload = smallb; if (this->fragment_.data (data) == -1) return -1; if (this->received_bytes_ != total) ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("Unexpected number of ") ACE_TEXT ("received bytes (%d/%d)\n"), this->received_bytes_, total), -1); if (this->compare (smallb) == -1) { ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("Mismatched smallb chain data\n")), -1); } } return 0; }