void set_qos(OctetSeq& qos, CORBA::Octet value)
{
  qos.length(1);
  qos[0] = value;
}
Beispiel #2
0
void Gate::
tracker ()
{
  // Time period after which a manual cancellation request is
  // checked for.
  //
  ACE_Time_Value const timeout (0, 500);

  while (true)
  {
    ssize_t n;

    while (true)
    {
      n = socket_.size (timeout);

      // Check for cancellation request.
      //
      {
        ACE_GUARD (TAO_SYNCH_MUTEX, ace_mon, this->mutex_);

        if (stop_)
          return;
      }

      if (n == -1)
      {
        if (errno != ETIME)
          ACE_OS::abort ();
      }
      else
        break;
    }

    CORBA::ULong seqn = ACE_Utils::truncate_cast<CORBA::ULong> (n);
    OctetSeq seq (seqn);
    seq.length (seqn);

    char* buffer = reinterpret_cast<char*> (seq.get_buffer ());

    if (socket_.recv (buffer, n) != n)
    {
      ACE_ERROR ((LM_ERROR,
                  "recv() reported different size than size()\n"));
      continue;
    }

    TAO_InputCDR cdr (buffer, n);

    StructuredEvent e;

    cdr >> e;

    // Add TTL header to prevent infinite message looping.
    //
    ULong i (0);

    for (; i < e.header.variable_header.length (); ++i)
    {
      if (ACE_OS::strcmp (e.header.variable_header[i].name.in (), id_.in ()) == 0)
        break;
    }

    if (i == e.header.variable_header.length ())
    {
      e.header.variable_header.length (i + 1);

      e.header.variable_header[i].name = string_dup (id_.in ());
    }

    //ACE_DEBUG ((LM_DEBUG,
    //            "adding %s as header #%d\n",
    //            e.header.variable_header[i].name.in (), i));

    e.header.variable_header[i].value <<= ULong (1);

    /*
    cerr << "IN: "
         << e.header.fixed_header.event_type.domain_name << "::"
         << e.header.fixed_header.event_type.type_name << " "
         << e.header.fixed_header.event_name << endl;
    */

    consumer_->push_structured_event (e);
  }
}