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;
}
Example #2
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;
}
Example #3
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;
}