DCPS_IR_Publication Class Reference

Representative of a Publication. More...

#include <DCPS_IR_Publication.h>

Inheritance diagram for DCPS_IR_Publication:
Inheritance graph
[legend]
Collaboration diagram for DCPS_IR_Publication:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 DCPS_IR_Publication (const OpenDDS::DCPS::RepoId &id, DCPS_IR_Participant *participant, DCPS_IR_Topic *topic, OpenDDS::DCPS::DataWriterRemote_ptr writer, const DDS::DataWriterQos &qos, const OpenDDS::DCPS::TransportLocatorSeq &info, const DDS::PublisherQos &publisherQos)
 ~DCPS_IR_Publication ()
int add_associated_subscription (DCPS_IR_Subscription *sub, bool active)
void association_complete (const OpenDDS::DCPS::RepoId &remote)
void call_association_complete (const OpenDDS::DCPS::RepoId &remote)
int remove_associated_subscription (DCPS_IR_Subscription *sub, CORBA::Boolean sendNotify, CORBA::Boolean notify_lost, bool notify_both_side=false)
int remove_associations (CORBA::Boolean notify_lost)
void disassociate_participant (OpenDDS::DCPS::RepoId id, bool reassociate=false)
 Remove any subscriptions whose participant has the id.
void disassociate_topic (OpenDDS::DCPS::RepoId id)
 Remove any subscriptions whose topic has the id.
void disassociate_subscription (OpenDDS::DCPS::RepoId id, bool reassociate=false)
 Remove any subscriptions with the id.
void update_incompatible_qos ()
CORBA::Boolean is_subscription_ignored (OpenDDS::DCPS::RepoId partId, OpenDDS::DCPS::RepoId topicId, OpenDDS::DCPS::RepoId subId)
DDS::DataWriterQosget_datawriter_qos ()
DDS::PublisherQosget_publisher_qos ()
bool set_qos (const DDS::DataWriterQos &qos, const DDS::PublisherQos &publisherQos, Update::SpecificQos &specificQos)
void set_qos (const DDS::DataWriterQos &qos)
 Update DataWriterQos only.
void set_qos (const DDS::PublisherQos &qos)
 Update PublisherQos only.
OpenDDS::DCPS::TransportLocatorSeq get_transportLocatorSeq () const
OpenDDS::DCPS::IncompatibleQosStatusget_incompatibleQosStatus ()
OpenDDS::DCPS::RepoId get_id ()
OpenDDS::DCPS::RepoId get_topic_id ()
OpenDDS::DCPS::RepoId get_participant_id ()
DCPS_IR_Topicget_topic ()
DCPS_IR_Topic_Descriptionget_topic_description ()
DDS::InstanceHandle_t get_handle ()
void set_handle (DDS::InstanceHandle_t handle)
CORBA::Boolean is_bit ()
void set_bit_status (CORBA::Boolean isBIT)
OpenDDS::DCPS::DataWriterRemote_ptr writer ()
void reevaluate_defunct_associations ()
void reevaluate_existing_associations ()
bool reevaluate_association (DCPS_IR_Subscription *subscription)
void update_expr_params (OpenDDS::DCPS::RepoId readerId, const DDS::StringSeq &params)
std::string dump_to_string (const std::string &prefix, int depth) const

Private Attributes

OpenDDS::DCPS::RepoId id_
DCPS_IR_Participantparticipant_
DCPS_IR_Topictopic_
DDS::InstanceHandle_t handle_
CORBA::Boolean isBIT_
OpenDDS::DCPS::DataWriterRemote_var writer_
 the corresponding DataWriterRemote object
DDS::DataWriterQos qos_
OpenDDS::DCPS::TransportLocatorSeq info_
DDS::PublisherQos publisherQos_
DCPS_IR_Subscription_Set associations_
DCPS_IR_Subscription_Set defunct_
OpenDDS::DCPS::IncompatibleQosStatus incompatibleQosStatus_

Detailed Description

Representative of a Publication.

Definition at line 41 of file DCPS_IR_Publication.h.


Constructor & Destructor Documentation

DCPS_IR_Publication h OPENDDS_BEGIN_VERSIONED_NAMESPACE_DECL DCPS_IR_Publication::DCPS_IR_Publication ( const OpenDDS::DCPS::RepoId id,
DCPS_IR_Participant participant,
DCPS_IR_Topic topic,
OpenDDS::DCPS::DataWriterRemote_ptr  writer,
const DDS::DataWriterQos qos,
const OpenDDS::DCPS::TransportLocatorSeq info,
const DDS::PublisherQos publisherQos 
)

Definition at line 26 of file DCPS_IR_Publication.cpp.

References OpenDDS::DCPS::IncompatibleQosStatus::count_since_last_send, incompatibleQosStatus_, OpenDDS::DCPS::IncompatibleQosStatus::total_count, and writer_.

00033   : id_(id),
00034     participant_(participant),
00035     topic_(topic),
00036     handle_(0),
00037     isBIT_(0),
00038     qos_(qos),
00039     info_(info),
00040     publisherQos_(publisherQos)
00041 {
00042   writer_ =  OpenDDS::DCPS::DataWriterRemote::_duplicate(writer);
00043 
00044   incompatibleQosStatus_.total_count = 0;
00045   incompatibleQosStatus_.count_since_last_send = 0;
00046 }

DCPS_IR_Publication::~DCPS_IR_Publication (  ) 

Definition at line 48 of file DCPS_IR_Publication.cpp.

00049 {
00050 }


Member Function Documentation

int DCPS_IR_Publication::add_associated_subscription ( DCPS_IR_Subscription sub,
bool  active 
)

Associate with the subscription Adds the subscription to the list of associated subscriptions and notifies datawriter if successfully added This method can mark the participant dead Returns 0 if added, 1 if already exists, -1 other failure

Definition at line 52 of file DCPS_IR_Publication.cpp.

References CORBA::Exception::_tao_print_exception(), ACE_TEXT(), associations_, OpenDDS::DCPS::DCPS_debug_level, OpenDDS::DCPS::ReaderAssociation::exprParams, OpenDDS::DCPS::ReaderAssociation::filterClassName, OpenDDS::DCPS::ReaderAssociation::filterExpression, DCPS_IR_Subscription::get_datareader_qos(), DCPS_IR_Subscription::get_expr_params(), DCPS_IR_Subscription::get_filter_class_name(), DCPS_IR_Subscription::get_filter_expression(), DCPS_IR_Subscription::get_id(), DCPS_IR_Subscription::get_subscriber_qos(), DCPS_IR_Subscription::get_transportLocatorSeq(), id_, ACE_Unbounded_Set_Ex< T, C >::insert(), DCPS_IR_Participant::is_alive(), DCPS_IR_Participant::isOwner(), LM_DEBUG, LM_ERROR, DCPS_IR_Participant::mark_dead(), participant_, OpenDDS::DCPS::ReaderAssociation::readerId, OpenDDS::DCPS::ReaderAssociation::readerQos, OpenDDS::DCPS::ReaderAssociation::readerTransInfo, status, OpenDDS::DCPS::ReaderAssociation::subQos, and writer_.

Referenced by DCPS_IR_Topic_Description::associate().

00054 {
00055   // keep track of the association locally
00056   int status = associations_.insert(sub);
00057 
00058   switch (status) {
00059   case 0: {
00060     // inform the datawriter about the association
00061     OpenDDS::DCPS::ReaderAssociation association;
00062     association.readerTransInfo = sub->get_transportLocatorSeq();
00063     association.readerId = sub->get_id();
00064     association.subQos = *(sub->get_subscriber_qos());
00065     association.readerQos = *(sub->get_datareader_qos());
00066     association.filterClassName = sub->get_filter_class_name().c_str();
00067     association.filterExpression = sub->get_filter_expression().c_str();
00068     association.exprParams = sub->get_expr_params();
00069 
00070     if (participant_->is_alive() && this->participant_->isOwner()) {
00071       try {
00072         if (OpenDDS::DCPS::DCPS_debug_level > 0) {
00073           OpenDDS::DCPS::RepoIdConverter pub_converter(id_);
00074           OpenDDS::DCPS::RepoIdConverter sub_converter(sub->get_id());
00075           ACE_DEBUG((LM_DEBUG,
00076                      ACE_TEXT("(%P|%t) DCPS_IR_Publication::add_associated_subscription:")
00077                      ACE_TEXT(" publication %C adding subscription %C.\n"),
00078                      std::string(pub_converter).c_str(),
00079                      std::string(sub_converter).c_str()));
00080         }
00081 
00082         writer_->add_association(id_, association, active);
00083 
00084         if (OpenDDS::DCPS::DCPS_debug_level > 0) {
00085           ACE_DEBUG((LM_DEBUG,
00086                      ACE_TEXT("(%P|%t) DCPS_IR_Publication::add_associated_subscription: ")
00087                      ACE_TEXT("successfully added subscription %x.\n"),
00088                      sub));
00089         }
00090       } catch (const CORBA::Exception& ex) {
00091         ex._tao_print_exception(
00092           "(%P|%t) ERROR: Exception caught in DCPS_IR_Publication::add_associated_subscription:");
00093         participant_->mark_dead();
00094         status = -1;
00095       }
00096     }
00097   }
00098   break;
00099 
00100   case 1: {
00101     OpenDDS::DCPS::RepoIdConverter pub_converter(id_);
00102     OpenDDS::DCPS::RepoIdConverter sub_converter(sub->get_id());
00103     ACE_ERROR((LM_ERROR,
00104                ACE_TEXT("(%P|%t) ERROR: DCPS_IR_Publication::add_associated_subscription: ")
00105                ACE_TEXT("publication %C attempted to re-add subscription %C.\n"),
00106                std::string(pub_converter).c_str(),
00107                std::string(sub_converter).c_str()));
00108   }
00109   break;
00110 
00111   case -1: {
00112     OpenDDS::DCPS::RepoIdConverter pub_converter(id_);
00113     OpenDDS::DCPS::RepoIdConverter sub_converter(sub->get_id());
00114     ACE_ERROR((LM_ERROR,
00115                ACE_TEXT("(%P|%t) ERROR: DCPS_IR_Publication::add_associated_subscription: ")
00116                ACE_TEXT("publication %C failed to add subscription %C.\n"),
00117                std::string(pub_converter).c_str(),
00118                std::string(sub_converter).c_str()));
00119   }
00120   };
00121 
00122   return status;
00123 }

Here is the call graph for this function:

Here is the caller graph for this function:

void DCPS_IR_Publication::association_complete ( const OpenDDS::DCPS::RepoId remote  ) 

The service participant that contains this Publication has indicated that the assocation to peer "remote" is complete. This method will locate the Subscription object for "remote" in order to inform it of the completed association.

Definition at line 126 of file DCPS_IR_Publication.cpp.

References associations_, ACE_Unbounded_Set_Ex< T, C >::begin(), ACE_Unbounded_Set_Ex< T, C >::end(), and get_id().

Referenced by TAO_DDS_DCPSInfo_i::association_complete().

00127 {
00128   typedef DCPS_IR_Subscription_Set::ITERATOR iter_t;
00129   for (iter_t iter = associations_.begin(); iter != associations_.end(); ++iter) {
00130     if ((*iter)->get_id() == remote) {
00131       (*iter)->call_association_complete(get_id());
00132     }
00133   }
00134 }

Here is the call graph for this function:

Here is the caller graph for this function:

void DCPS_IR_Publication::call_association_complete ( const OpenDDS::DCPS::RepoId remote  ) 

Invoke the DataWriterRemote::association_complete() callback, passing the "remote" parameter (Subscription) to the service participant.

Definition at line 137 of file DCPS_IR_Publication.cpp.

References CORBA::Exception::_tao_print_exception(), OpenDDS::DCPS::DCPS_debug_level, DCPS_IR_Participant::mark_dead(), participant_, and writer_.

00138 {
00139   try {
00140     writer_->association_complete(remote);
00141   } catch (const CORBA::Exception& ex) {
00142     if (OpenDDS::DCPS::DCPS_debug_level > 0) {
00143       ex._tao_print_exception(
00144         "(%P|%t) ERROR: Exception caught in DCPS_IR_Publication::call_association_complete:");
00145     }
00146     participant_->mark_dead();
00147   }
00148 }

Here is the call graph for this function:

void DCPS_IR_Publication::disassociate_participant ( OpenDDS::DCPS::RepoId  id,
bool  reassociate = false 
)

Remove any subscriptions whose participant has the id.

Definition at line 249 of file DCPS_IR_Publication.cpp.

References CORBA::Exception::_tao_print_exception(), ACE_TEXT(), associations_, ACE_Unbounded_Set_Ex< T, C >::begin(), OpenDDS::DCPS::DCPS_debug_level, defunct_, ACE_Unbounded_Set_Ex< T, C >::end(), DCPS_IR_Subscription::get_id(), DCPS_IR_Subscription::get_participant_id(), id_, ACE_Unbounded_Set_Ex< T, C >::insert(), DCPS_IR_Participant::is_alive(), DCPS_IR_Participant::isOwner(), LM_DEBUG, LM_ERROR, DCPS_IR_Participant::mark_dead(), participant_, DCPS_IR_Subscription::remove_associated_publication(), remove_associated_subscription(), send(), ACE_Unbounded_Set_Ex< T, C >::size(), and writer_.

00251 {
00252   DCPS_IR_Subscription* sub = 0;
00253   size_t numAssociations = associations_.size();
00254   CORBA::Boolean send = 1;
00255   CORBA::Boolean dontSend = 0;
00256   long count = 0;
00257 
00258   if (0 < numAssociations) {
00259     OpenDDS::DCPS::ReaderIdSeq idSeq(static_cast<CORBA::ULong>(numAssociations));
00260     idSeq.length(static_cast<CORBA::ULong>(numAssociations));
00261 
00262     DCPS_IR_Subscription_Set::ITERATOR iter = associations_.begin();
00263     DCPS_IR_Subscription_Set::ITERATOR end = associations_.end();
00264 
00265     while (iter != end) {
00266       sub = *iter;
00267       ++iter;
00268 
00269       if (OpenDDS::DCPS::DCPS_debug_level > 0) {
00270         OpenDDS::DCPS::RepoIdConverter pub_converter(id_);
00271         OpenDDS::DCPS::RepoIdConverter sub_converter(sub->get_id());
00272         OpenDDS::DCPS::RepoIdConverter pub_part_converter(id);
00273         OpenDDS::DCPS::RepoIdConverter sub_part_converter(sub->get_participant_id());
00274         ACE_DEBUG((LM_DEBUG,
00275                    ACE_TEXT("(%P|%t) DCPS_IR_Publication::disassociate_participant: ")
00276                    ACE_TEXT("publication %C testing if subscription %C particpant %C == %C.\n"),
00277                    std::string(pub_converter).c_str(),
00278                    std::string(sub_converter).c_str(),
00279                    std::string(sub_part_converter).c_str(),
00280                    std::string(pub_part_converter).c_str()));
00281       }
00282 
00283       if (id == sub->get_participant_id()) {
00284         CORBA::Boolean dont_notify_lost = 0;
00285         sub->remove_associated_publication(this, send, dont_notify_lost);
00286         remove_associated_subscription(sub, dontSend, dont_notify_lost);
00287 
00288         idSeq[count] = sub->get_id();
00289         ++count;
00290 
00291         if (reassociate && this->defunct_.insert(sub) != 0) {
00292           OpenDDS::DCPS::RepoIdConverter pub_converter(id_);
00293           OpenDDS::DCPS::RepoIdConverter sub_converter(sub->get_id());
00294           ACE_ERROR((LM_ERROR,
00295                      ACE_TEXT("(%P|%t) ERROR: DCPS_IR_Publication::disassociate_participant: ")
00296                      ACE_TEXT("publication %C failed to reassociate subscription %C at %x.\n"),
00297                      std::string(pub_converter).c_str(),
00298                      std::string(sub_converter).c_str(),
00299                      sub));
00300         }
00301       }
00302     }
00303 
00304     if (0 < count) {
00305       idSeq.length(count);
00306 
00307       if (participant_->is_alive() && this->participant_->isOwner()) {
00308         try {
00309           CORBA::Boolean dont_notify_lost = 0;
00310           writer_->remove_associations(idSeq, dont_notify_lost);
00311 
00312         } catch (const CORBA::Exception& ex) {
00313           if (OpenDDS::DCPS::DCPS_debug_level > 0) {
00314             ex._tao_print_exception(
00315               "(%P|%t) ERROR: Exception caught in DCPS_IR_Publication::disassociate_participant:");
00316           }
00317 
00318           participant_->mark_dead();
00319         }
00320       }
00321     }
00322   }
00323 }

Here is the call graph for this function:

void DCPS_IR_Publication::disassociate_subscription ( OpenDDS::DCPS::RepoId  id,
bool  reassociate = false 
)

Remove any subscriptions with the id.

Definition at line 389 of file DCPS_IR_Publication.cpp.

References CORBA::Exception::_tao_print_exception(), ACE_TEXT(), associations_, ACE_Unbounded_Set_Ex< T, C >::begin(), OpenDDS::DCPS::DCPS_debug_level, defunct_, ACE_Unbounded_Set_Ex< T, C >::end(), DCPS_IR_Subscription::get_id(), id_, ACE_Unbounded_Set_Ex< T, C >::insert(), DCPS_IR_Participant::is_alive(), DCPS_IR_Participant::isOwner(), LM_DEBUG, LM_ERROR, DCPS_IR_Participant::mark_dead(), participant_, DCPS_IR_Subscription::remove_associated_publication(), remove_associated_subscription(), send(), ACE_Unbounded_Set_Ex< T, C >::size(), and writer_.

Referenced by TAO_DDS_DCPSInfo_i::disassociate_publication().

00391 {
00392   DCPS_IR_Subscription* sub = 0;
00393   size_t numAssociations = associations_.size();
00394   CORBA::Boolean send = 1;
00395   CORBA::Boolean dontSend = 0;
00396   long count = 0;
00397 
00398   if (0 < numAssociations) {
00399     OpenDDS::DCPS::ReaderIdSeq idSeq(static_cast<CORBA::ULong>(numAssociations));
00400     idSeq.length(static_cast<CORBA::ULong>(numAssociations));
00401 
00402     DCPS_IR_Subscription_Set::ITERATOR iter = associations_.begin();
00403     DCPS_IR_Subscription_Set::ITERATOR end = associations_.end();
00404 
00405     while (iter != end) {
00406       sub = *iter;
00407       ++iter;
00408 
00409       if (OpenDDS::DCPS::DCPS_debug_level > 0) {
00410         OpenDDS::DCPS::RepoIdConverter pub_converter(id_);
00411         OpenDDS::DCPS::RepoIdConverter sub_converter(sub->get_id());
00412         OpenDDS::DCPS::RepoIdConverter pub_sub_converter(id);
00413         ACE_DEBUG((LM_DEBUG,
00414                    ACE_TEXT("(%P|%t) DCPS_IR_Publication::disassociate_subscription: ")
00415                    ACE_TEXT("publication %C testing if subscription %C == %C.\n"),
00416                    std::string(pub_converter).c_str(),
00417                    std::string(sub_converter).c_str(),
00418                    std::string(pub_sub_converter).c_str()));
00419       }
00420 
00421       if (id == sub->get_id()) {
00422         CORBA::Boolean dont_notify_lost = 0;
00423         sub->remove_associated_publication(this, send, dont_notify_lost);
00424         remove_associated_subscription(sub, dontSend, dont_notify_lost);
00425 
00426         idSeq[count] = sub->get_id();
00427         ++count;
00428 
00429         if (reassociate && this->defunct_.insert(sub) != 0) {
00430           OpenDDS::DCPS::RepoIdConverter pub_converter(id_);
00431           OpenDDS::DCPS::RepoIdConverter sub_converter(sub->get_id());
00432           ACE_ERROR((LM_ERROR,
00433                      ACE_TEXT("(%P|%t) ERROR: DCPS_IR_Publication::disassociate_subscription: ")
00434                      ACE_TEXT("publication %C failed to reassociate subscription %C at %x.\n"),
00435                      std::string(pub_converter).c_str(),
00436                      std::string(sub_converter).c_str(),
00437                      sub));
00438         }
00439       }
00440     }
00441 
00442     if (0 < count) {
00443       idSeq.length(count);
00444 
00445       if (participant_->is_alive() && this->participant_->isOwner()) {
00446         try {
00447           CORBA::Boolean dont_notify_lost = 0;
00448           writer_->remove_associations(idSeq, dont_notify_lost);
00449 
00450         } catch (const CORBA::Exception& ex) {
00451           if (OpenDDS::DCPS::DCPS_debug_level > 0) {
00452             ex._tao_print_exception(
00453               "(%P|%t) ERROR: Exception caught in DCPS_IR_Publication::remove_associations:");
00454           }
00455 
00456           participant_->mark_dead();
00457         }
00458       }
00459     }
00460   }
00461 }

Here is the call graph for this function:

Here is the caller graph for this function:

void DCPS_IR_Publication::disassociate_topic ( OpenDDS::DCPS::RepoId  id  ) 

Remove any subscriptions whose topic has the id.

Definition at line 325 of file DCPS_IR_Publication.cpp.

References CORBA::Exception::_tao_print_exception(), ACE_TEXT(), associations_, ACE_Unbounded_Set_Ex< T, C >::begin(), OpenDDS::DCPS::DCPS_debug_level, ACE_Unbounded_Set_Ex< T, C >::end(), DCPS_IR_Subscription::get_id(), DCPS_IR_Subscription::get_topic_id(), id_, DCPS_IR_Participant::is_alive(), DCPS_IR_Participant::isOwner(), LM_DEBUG, DCPS_IR_Participant::mark_dead(), participant_, DCPS_IR_Subscription::remove_associated_publication(), remove_associated_subscription(), send(), ACE_Unbounded_Set_Ex< T, C >::size(), and writer_.

00326 {
00327   DCPS_IR_Subscription* sub = 0;
00328   size_t numAssociations = associations_.size();
00329   CORBA::Boolean send = 1;
00330   CORBA::Boolean dontSend = 0;
00331   long count = 0;
00332 
00333   if (0 < numAssociations) {
00334     OpenDDS::DCPS::ReaderIdSeq idSeq(static_cast<CORBA::ULong>(numAssociations));
00335     idSeq.length(static_cast<CORBA::ULong>(numAssociations));
00336 
00337     DCPS_IR_Subscription_Set::ITERATOR iter = associations_.begin();
00338     DCPS_IR_Subscription_Set::ITERATOR end = associations_.end();
00339 
00340     while (iter != end) {
00341       sub = *iter;
00342       ++iter;
00343 
00344       if (OpenDDS::DCPS::DCPS_debug_level > 0) {
00345         OpenDDS::DCPS::RepoIdConverter pub_converter(id_);
00346         OpenDDS::DCPS::RepoIdConverter sub_converter(sub->get_id());
00347         OpenDDS::DCPS::RepoIdConverter pub_topic_converter(id);
00348         OpenDDS::DCPS::RepoIdConverter sub_topic_converter(sub->get_topic_id());
00349         ACE_DEBUG((LM_DEBUG,
00350                    ACE_TEXT("(%P|%t) DCPS_IR_Publication::disassociate_topic: ")
00351                    ACE_TEXT("publication %C testing if subscription %C topic %C == %C.\n"),
00352                    std::string(pub_converter).c_str(),
00353                    std::string(sub_converter).c_str(),
00354                    std::string(sub_topic_converter).c_str(),
00355                    std::string(pub_topic_converter).c_str()));
00356       }
00357 
00358       if (id == sub->get_topic_id()) {
00359         CORBA::Boolean dont_notify_lost = 0;
00360         sub->remove_associated_publication(this, send, dont_notify_lost);
00361         remove_associated_subscription(sub, dontSend, dont_notify_lost);
00362 
00363         idSeq[count] = sub->get_id();
00364         ++count;
00365       }
00366     }
00367 
00368     if (0 < count) {
00369       idSeq.length(count);
00370 
00371       if (participant_->is_alive() && this->participant_->isOwner()) {
00372         try {
00373           CORBA::Boolean dont_notify_lost = 0;
00374           writer_->remove_associations(idSeq, dont_notify_lost);
00375 
00376         } catch (const CORBA::Exception& ex) {
00377           if (OpenDDS::DCPS::DCPS_debug_level > 0) {
00378             ex._tao_print_exception(
00379               "(%P|%t) ERROR: Exception caught in DCPS_IR_Publication::remove_associations:");
00380           }
00381 
00382           participant_->mark_dead();
00383         }
00384       }
00385     }
00386   }
00387 }

Here is the call graph for this function:

std::string DCPS_IR_Publication::dump_to_string ( const std::string &  prefix,
int  depth 
) const

Definition at line 749 of file DCPS_IR_Publication.cpp.

References associations_, ACE_Unbounded_Set_Ex< T, C >::begin(), defunct_, ACE_Unbounded_Set_Ex< T, C >::end(), id_, isBIT_, and str.

00750 {
00751   std::string str;
00752 #if !defined (OPENDDS_INFOREPO_REDUCED_FOOTPRINT)
00753   OpenDDS::DCPS::RepoIdConverter local_converter(id_);
00754 
00755   for (int i=0; i < depth; i++)
00756     str += prefix;
00757   std::string indent = str + prefix;
00758   str += "DCPS_IR_Publication[";
00759   str += std::string(local_converter);
00760   str += "]";
00761   if (isBIT_)
00762     str += " (BIT)";
00763   str += "\n";
00764 
00765   str += indent + "Associations [ ";
00766   for (DCPS_IR_Subscription_Set::const_iterator assoc = associations_.begin();
00767        assoc != associations_.end();
00768        assoc++)
00769   {
00770     OpenDDS::DCPS::RepoIdConverter assoc_converter((*assoc)->get_id());
00771     str += std::string(assoc_converter);
00772     str += " ";
00773   }
00774   str += "]\n";
00775 
00776   str += indent + "Defunct Associations [ ";
00777   for (DCPS_IR_Subscription_Set::const_iterator def = defunct_.begin();
00778        def != defunct_.end();
00779        def++)
00780   {
00781     OpenDDS::DCPS::RepoIdConverter def_converter((*def)->get_id());
00782     str += std::string(def_converter);
00783     str += " ";
00784   }
00785   str += "]\n";
00786 #endif // !defined (OPENDDS_INFOREPO_REDUCED_FOOTPRINT)
00787   return str;
00788 }

Here is the call graph for this function:

DDS::DataWriterQos * DCPS_IR_Publication::get_datawriter_qos (  ) 

Return pointer to the DataWriter qos Publication retains ownership

Definition at line 492 of file DCPS_IR_Publication.cpp.

References qos_.

Referenced by DCPS_IR_Subscription::add_associated_publication(), DCPS_IR_Domain::publish_publication_bit(), OpenDDS::Federator::ManagerImpl::pushState(), DCPS_IR_Subscription::reevaluate_association(), reevaluate_association(), and DCPS_IR_Topic_Description::try_associate().

00493 {
00494   return &qos_;
00495 }

Here is the caller graph for this function:

DDS::InstanceHandle_t DCPS_IR_Publication::get_handle ( void   ) 

Definition at line 638 of file DCPS_IR_Publication.cpp.

References handle_.

Referenced by DCPS_IR_Domain::dispose_publication_bit().

00639 {
00640   return handle_;
00641 }

Here is the caller graph for this function:

OpenDDS::DCPS::RepoId DCPS_IR_Publication::get_id ( void   ) 
OpenDDS::DCPS::IncompatibleQosStatus * DCPS_IR_Publication::get_incompatibleQosStatus (  ) 

Return pointer to the incompatible qos status Publication retains ownership

Definition at line 608 of file DCPS_IR_Publication.cpp.

References incompatibleQosStatus_.

Referenced by DCPS_IR_Subscription::reevaluate_association(), reevaluate_association(), DCPS_IR_Topic_Description::try_associate(), DCPS_IR_Topic::try_associate(), and DCPS_IR_Topic_Description::try_associate_publication().

00609 {
00610   return &incompatibleQosStatus_;
00611 }

Here is the caller graph for this function:

OpenDDS::DCPS::RepoId DCPS_IR_Publication::get_participant_id (  ) 

Definition at line 623 of file DCPS_IR_Publication.cpp.

References DCPS_IR_Participant::get_id(), and participant_.

Referenced by DCPS_IR_Subscription::disassociate_participant(), DCPS_IR_Domain::publish_publication_bit(), OpenDDS::Federator::ManagerImpl::pushState(), and DCPS_IR_Topic_Description::try_associate().

00624 {
00625   return participant_->get_id();
00626 }

Here is the call graph for this function:

Here is the caller graph for this function:

DDS::PublisherQos * DCPS_IR_Publication::get_publisher_qos (  ) 

Return pointer to the Publisher qos Publication retains ownership

Definition at line 598 of file DCPS_IR_Publication.cpp.

References publisherQos_.

Referenced by DCPS_IR_Subscription::add_associated_publication(), DCPS_IR_Domain::publish_publication_bit(), OpenDDS::Federator::ManagerImpl::pushState(), DCPS_IR_Subscription::reevaluate_association(), reevaluate_association(), and DCPS_IR_Topic_Description::try_associate().

00599 {
00600   return &publisherQos_;
00601 }

Here is the caller graph for this function:

DCPS_IR_Topic * DCPS_IR_Publication::get_topic (  ) 

Definition at line 628 of file DCPS_IR_Publication.cpp.

References topic_.

Referenced by DCPS_IR_Domain::publish_publication_bit().

00629 {
00630   return topic_;
00631 }

Here is the caller graph for this function:

DCPS_IR_Topic_Description * DCPS_IR_Publication::get_topic_description (  ) 

Definition at line 633 of file DCPS_IR_Publication.cpp.

References DCPS_IR_Topic::get_topic_description(), and topic_.

Referenced by DCPS_IR_Domain::publish_publication_bit().

00634 {
00635   return topic_->get_topic_description();
00636 }

Here is the call graph for this function:

Here is the caller graph for this function:

OpenDDS::DCPS::RepoId DCPS_IR_Publication::get_topic_id (  ) 

Definition at line 618 of file DCPS_IR_Publication.cpp.

References DCPS_IR_Topic::get_id(), and topic_.

Referenced by DCPS_IR_Subscription::disassociate_topic(), OpenDDS::Federator::ManagerImpl::pushState(), and DCPS_IR_Topic_Description::try_associate().

00619 {
00620   return topic_->get_id();
00621 }

Here is the call graph for this function:

Here is the caller graph for this function:

OpenDDS::DCPS::TransportLocatorSeq DCPS_IR_Publication::get_transportLocatorSeq (  )  const
CORBA::Boolean DCPS_IR_Publication::is_bit (  ) 

Definition at line 648 of file DCPS_IR_Publication.cpp.

References isBIT_.

Referenced by DCPS_IR_Domain::dispose_publication_bit().

00649 {
00650   return isBIT_;
00651 }

Here is the caller graph for this function:

CORBA::Boolean DCPS_IR_Publication::is_subscription_ignored ( OpenDDS::DCPS::RepoId  partId,
OpenDDS::DCPS::RepoId  topicId,
OpenDDS::DCPS::RepoId  subId 
)

Check that none of the ids given are ones that this publication should ignore. returns 1 if one of these ids is an ignored id

Definition at line 480 of file DCPS_IR_Publication.cpp.

References DCPS_IR_Participant::is_participant_ignored(), DCPS_IR_Participant::is_subscription_ignored(), DCPS_IR_Participant::is_topic_ignored(), and participant_.

Referenced by DCPS_IR_Topic_Description::try_associate().

00483 {
00484   CORBA::Boolean ignored;
00485   ignored = (participant_->is_participant_ignored(partId) ||
00486              participant_->is_topic_ignored(topicId) ||
00487              participant_->is_subscription_ignored(subId));
00488 
00489   return ignored;
00490 }

Here is the call graph for this function:

Here is the caller graph for this function:

bool DCPS_IR_Publication::reevaluate_association ( DCPS_IR_Subscription subscription  ) 

Definition at line 703 of file DCPS_IR_Publication.cpp.

References associations_, OpenDDS::DCPS::compatibleQOS(), ACE_Unbounded_Set_Ex< T, C >::find(), DCPS_IR_Subscription::get_datareader_qos(), get_datawriter_qos(), DCPS_IR_Subscription::get_incompatibleQosStatus(), get_incompatibleQosStatus(), get_publisher_qos(), DCPS_IR_Subscription::get_subscriber_qos(), DCPS_IR_Topic::get_topic_description(), DCPS_IR_Subscription::get_transportLocatorSeq(), get_transportLocatorSeq(), remove_associated_subscription(), status, topic_, and DCPS_IR_Topic_Description::try_associate().

Referenced by DCPS_IR_Topic_Description::reevaluate_associations(), DCPS_IR_Topic::reevaluate_associations(), reevaluate_defunct_associations(), and reevaluate_existing_associations().

00704 {
00705   int status = this->associations_.find(subscription);
00706 
00707   if (status == 0) {
00708     // verify if they are still compatiable after change
00709 
00710 
00711     if (!OpenDDS::DCPS::compatibleQOS(this->get_incompatibleQosStatus(),
00712                                       subscription->get_incompatibleQosStatus(),
00713                                       this->get_transportLocatorSeq(),
00714                                       subscription->get_transportLocatorSeq(),
00715                                       this->get_datawriter_qos(),
00716                                       subscription->get_datareader_qos(),
00717                                       this->get_publisher_qos(),
00718                                       subscription->get_subscriber_qos())) {
00719       bool sendNotify = true; // inform datawriter
00720       bool notify_lost = true; // invoke listerner callback
00721 
00722       this->remove_associated_subscription(subscription, sendNotify, notify_lost, true);
00723     }
00724 
00725   } else {
00726     DCPS_IR_Topic_Description* description = this->topic_->get_topic_description();
00727     return description->try_associate(this, subscription);
00728   }
00729 
00730   return false;
00731 }

Here is the call graph for this function:

Here is the caller graph for this function:

void DCPS_IR_Publication::reevaluate_defunct_associations (  ) 

Definition at line 665 of file DCPS_IR_Publication.cpp.

References ACE_TEXT(), ACE_Unbounded_Set_Ex< T, C >::begin(), defunct_, ACE_Unbounded_Set_Ex< T, C >::end(), DCPS_IR_Subscription::get_id(), id_, LM_ERROR, reevaluate_association(), and ACE_Unbounded_Set_Ex< T, C >::remove().

00666 {
00667   DCPS_IR_Subscription_Set::iterator it(this->defunct_.begin());
00668   while (it != this->defunct_.end()) {
00669     DCPS_IR_Subscription* subscription = *it;
00670     ++it;
00671 
00672     if (reevaluate_association(subscription)) {
00673       this->defunct_.remove(subscription); // no longer defunct
00674 
00675     } else {
00676       OpenDDS::DCPS::RepoIdConverter pub_converter(id_);
00677       OpenDDS::DCPS::RepoIdConverter sub_converter(subscription->get_id());
00678       ACE_ERROR((LM_ERROR,
00679                  ACE_TEXT("(%P|%t) ERROR: DCPS_IR_Publication::reevaluate_defunct_associations: ")
00680                  ACE_TEXT("publication %C failed to reassociate subscription %C at %x.\n"),
00681                  std::string(pub_converter).c_str(),
00682                  std::string(sub_converter).c_str(),
00683                  subscription));
00684     }
00685   }
00686 }

Here is the call graph for this function:

void DCPS_IR_Publication::reevaluate_existing_associations (  ) 

Definition at line 688 of file DCPS_IR_Publication.cpp.

References associations_, ACE_Unbounded_Set_Ex< T, C >::begin(), ACE_Unbounded_Set_Ex< T, C >::end(), and reevaluate_association().

Referenced by set_qos().

00689 {
00690   DCPS_IR_Subscription* sub = 0;
00691   DCPS_IR_Subscription_Set::ITERATOR iter = associations_.begin();
00692   DCPS_IR_Subscription_Set::ITERATOR end = associations_.end();
00693 
00694   while (iter != end) {
00695     sub = *iter;
00696     ++iter;
00697 
00698     this->reevaluate_association(sub);
00699   }
00700 }

Here is the call graph for this function:

Here is the caller graph for this function:

int DCPS_IR_Publication::remove_associated_subscription ( DCPS_IR_Subscription sub,
CORBA::Boolean  sendNotify,
CORBA::Boolean  notify_lost,
bool  notify_both_side = false 
)

Remove the associated subscription Removes the subscription from the list of associated subscriptions if return successful sendNotify indicates whether to tell the datawriter about removing the subscription The notify_lost parameter is passed to the remove_associations() The notify_both_side parameter indicates if it needs call sub to remove association as well. See the comments of remove_associations() in DataWriterRemote.idl or DataReaderRemote.idl. This method can mark the participant dead Returns 0 if successful

Definition at line 150 of file DCPS_IR_Publication.cpp.

References CORBA::Exception::_tao_print_exception(), ACE_TEXT(), associations_, OpenDDS::DCPS::DCPS_debug_level, DCPS_IR_Subscription::get_id(), id_, DCPS_IR_Participant::is_alive(), DCPS_IR_Participant::isOwner(), LM_DEBUG, LM_ERROR, DCPS_IR_Participant::mark_dead(), OPENDDS_STRING, participant_, ACE_Unbounded_Set_Ex< T, C >::remove(), DCPS_IR_Subscription::remove_associated_publication(), status, and writer_.

Referenced by DCPS_IR_Subscription::disassociate_participant(), disassociate_participant(), DCPS_IR_Subscription::disassociate_publication(), disassociate_subscription(), DCPS_IR_Subscription::disassociate_topic(), disassociate_topic(), reevaluate_association(), DCPS_IR_Subscription::remove_associated_publication(), DCPS_IR_Subscription::remove_associations(), and remove_associations().

00154 {
00155   bool marked_dead = false;
00156 
00157   if (sendNotify) {
00158     if (participant_->is_alive() && this->participant_->isOwner()) {
00159       try {
00160         if (OpenDDS::DCPS::DCPS_debug_level > 0) {
00161           OpenDDS::DCPS::RepoIdConverter pub_converter(id_);
00162           OpenDDS::DCPS::RepoIdConverter sub_converter(sub->get_id());
00163           ACE_DEBUG((LM_DEBUG,
00164                      ACE_TEXT("(%P|%t) DCPS_IR_Publication::remove_associated_subscription:")
00165                      ACE_TEXT(" calling pub %C with sub %C\n"),
00166                      OPENDDS_STRING(pub_converter).c_str(),
00167                      OPENDDS_STRING(sub_converter).c_str()));
00168         }
00169 
00170         OpenDDS::DCPS::ReaderIdSeq idSeq(1);
00171         idSeq.length(1);
00172         idSeq[0] = sub->get_id();
00173 
00174         writer_->remove_associations(idSeq, notify_lost);
00175 
00176         if (notify_both_side) {
00177           sub->remove_associated_publication(this, sendNotify, notify_lost);
00178         }
00179 
00180       } catch (const CORBA::Exception& ex) {
00181         if (OpenDDS::DCPS::DCPS_debug_level > 0) {
00182           ex._tao_print_exception(
00183             "(%P|%t) ERROR: Exception caught in DCPS_IR_Publication::remove_associated_subscription:");
00184         }
00185 
00186         participant_->mark_dead();
00187         marked_dead = true;
00188       }
00189     }
00190   }
00191 
00192   int status = associations_.remove(sub);
00193 
00194   if (0 == status) {
00195     if (OpenDDS::DCPS::DCPS_debug_level > 0) {
00196       OpenDDS::DCPS::RepoIdConverter pub_converter(id_);
00197       OpenDDS::DCPS::RepoIdConverter sub_converter(sub->get_id());
00198       ACE_DEBUG((LM_DEBUG,
00199                  ACE_TEXT("(%P|%t) DCPS_IR_Publication::remove_associated_subscription: ")
00200                  ACE_TEXT("publication %C removed subscription %C at %x.\n"),
00201                  std::string(pub_converter).c_str(),
00202                  std::string(sub_converter).c_str(),
00203                  sub));
00204     }
00205 
00206   } else {
00207     OpenDDS::DCPS::RepoIdConverter pub_converter(id_);
00208     OpenDDS::DCPS::RepoIdConverter sub_converter(sub->get_id());
00209     ACE_ERROR((LM_ERROR,
00210                ACE_TEXT("(%P|%t) ERROR: DCPS_IR_Publication::remove_associated_subscription: ")
00211                ACE_TEXT("publication %C failed to remove subscription %C at %x.\n"),
00212                std::string(pub_converter).c_str(),
00213                std::string(sub_converter).c_str(),
00214                sub));
00215   } // if (0 == status)
00216 
00217   if (marked_dead) {
00218     return -1;
00219 
00220   } else {
00221     return status;
00222   }
00223 }

Here is the call graph for this function:

Here is the caller graph for this function:

int DCPS_IR_Publication::remove_associations ( CORBA::Boolean  notify_lost  ) 

Removes all the associated subscriptions This method can mark the participant dead The notify_lost flag true indicates this remove_associations is called when the InfoRepo detects this publication is lost because of the failure of invocation on this publication. Returns 0 if successful

Definition at line 225 of file DCPS_IR_Publication.cpp.

References associations_, ACE_Unbounded_Set_Ex< T, C >::begin(), defunct_, ACE_Unbounded_Set_Ex< T, C >::end(), DCPS_IR_Subscription::remove_associated_publication(), remove_associated_subscription(), ACE_Unbounded_Set_Ex< T, C >::reset(), send(), ACE_Unbounded_Set_Ex< T, C >::size(), and status.

00226 {
00227   int status = 0;
00228   DCPS_IR_Subscription* sub = 0;
00229   size_t numAssociations = associations_.size();
00230   CORBA::Boolean dontSend = 0;
00231   CORBA::Boolean send = 1;
00232 
00233   if (0 < numAssociations) {
00234     DCPS_IR_Subscription_Set::ITERATOR iter = associations_.begin();
00235     DCPS_IR_Subscription_Set::ITERATOR end = associations_.end();
00236 
00237     while (iter != end) {
00238       sub = *iter;
00239       ++iter;
00240       sub->remove_associated_publication(this, send, notify_lost);
00241       remove_associated_subscription(sub, dontSend, notify_lost);
00242     }
00243   }
00244   this->defunct_.reset();
00245 
00246   return status;
00247 }

Here is the call graph for this function:

void DCPS_IR_Publication::set_bit_status ( CORBA::Boolean  isBIT  ) 

Definition at line 653 of file DCPS_IR_Publication.cpp.

References isBIT_.

Referenced by DCPS_IR_Participant::add_publication(), and DCPS_IR_Domain::publish_publication_bit().

00654 {
00655   isBIT_ = isBIT;
00656 }

Here is the caller graph for this function:

void DCPS_IR_Publication::set_handle ( DDS::InstanceHandle_t  handle  ) 

Definition at line 643 of file DCPS_IR_Publication.cpp.

References handle_.

Referenced by DCPS_IR_Domain::publish_publication_bit().

00644 {
00645   handle_ = handle;
00646 }

Here is the caller graph for this function:

void DCPS_IR_Publication::set_qos ( const DDS::PublisherQos qos  ) 

Update PublisherQos only.

Definition at line 529 of file DCPS_IR_Publication.cpp.

References DCPS_IR_Participant::get_domain_reference(), DCPS_IR_Topic::get_topic_description(), participant_, DCPS_IR_Domain::publish_publication_bit(), publisherQos_, DCPS_IR_Topic_Description::reevaluate_associations(), reevaluate_existing_associations(), OpenDDS::DCPS::should_check_association_upon_change(), ACE_OS::sleep(), and topic_.

00530 {
00531   if (false == (qos == this->publisherQos_)) {
00532     // Check if we should check while we have both values.
00533     bool check = OpenDDS::DCPS::should_check_association_upon_change(qos, this->publisherQos_);
00534 
00535     // Store the new, compatible, value.
00536     this->publisherQos_ = qos;
00537 
00538     if (check) {
00539       // This will remove any newly stale associations.
00540       this->reevaluate_existing_associations();
00541 
00542       // Sleep a while to let remove_association handled by DataWriter
00543       // before add_association. Otherwise, new association will have
00544       // trouble to connect each other.
00545       ACE_OS::sleep(ACE_Time_Value(0, 250000));
00546 
00547       // This will establish any newly made associations.
00548       DCPS_IR_Topic_Description* description
00549       = this->topic_->get_topic_description();
00550       description->reevaluate_associations(this);
00551     }
00552 
00553     this->participant_->get_domain_reference()->publish_publication_bit(this);
00554   }
00555 }

Here is the call graph for this function:

void DCPS_IR_Publication::set_qos ( const DDS::DataWriterQos qos  ) 

Update DataWriterQos only.

Definition at line 500 of file DCPS_IR_Publication.cpp.

References DCPS_IR_Participant::get_domain_reference(), DCPS_IR_Topic::get_topic_description(), participant_, DCPS_IR_Domain::publish_publication_bit(), qos_, DCPS_IR_Topic_Description::reevaluate_associations(), reevaluate_existing_associations(), OpenDDS::DCPS::should_check_association_upon_change(), ACE_OS::sleep(), and topic_.

00501 {
00502   if (false == (qos == this->qos_)) {
00503     // Check if we should check while we have both values.
00504     bool check = OpenDDS::DCPS::should_check_association_upon_change(qos, this->qos_);
00505 
00506     // Store the new, compatible, value.
00507     this->qos_ = qos;
00508 
00509     if (check) {
00510       // This will remove any newly stale associations.
00511       this->reevaluate_existing_associations();
00512 
00513       // Sleep a while to let remove_association handled by DataWriter
00514       // before add_association. Otherwise, new association will have
00515       // trouble to connect each other.
00516       ACE_OS::sleep(ACE_Time_Value(0, 250000));
00517 
00518       // This will establish any newly made associations.
00519       DCPS_IR_Topic_Description* description
00520       = this->topic_->get_topic_description();
00521       description->reevaluate_associations(this);
00522     }
00523 
00524     this->participant_->get_domain_reference()->publish_publication_bit(this);
00525   }
00526 }

Here is the call graph for this function:

bool DCPS_IR_Publication::set_qos ( const DDS::DataWriterQos qos,
const DDS::PublisherQos publisherQos,
Update::SpecificQos specificQos 
)

Update the DataWriter or Publisher qos and also publish the qos changes to datawriter BIT.

Definition at line 557 of file DCPS_IR_Publication.cpp.

References Update::DataWriterQos, DCPS_IR_Participant::get_domain_reference(), DCPS_IR_Topic::get_topic_description(), Update::NoQos, participant_, DCPS_IR_Domain::publish_publication_bit(), Update::PublisherQos, publisherQos_, qos_, DCPS_IR_Topic_Description::reevaluate_associations(), reevaluate_existing_associations(), OpenDDS::DCPS::should_check_association_upon_change(), and topic_.

Referenced by TAO_DDS_DCPSInfo_i::update_publication_qos().

00560 {
00561   bool need_evaluate = false;
00562   bool u_dw_qos = !(qos_ == qos);
00563 
00564   if (u_dw_qos) {
00565     if (OpenDDS::DCPS::should_check_association_upon_change(qos_, qos)) {
00566       need_evaluate = true;
00567     }
00568 
00569     qos_ = qos;
00570   }
00571 
00572   bool u_pub_qos = !(publisherQos_ == publisherQos);
00573 
00574   if (u_pub_qos) {
00575     if (OpenDDS::DCPS::should_check_association_upon_change(publisherQos_, publisherQos)) {
00576       need_evaluate = true;
00577     }
00578 
00579     publisherQos_ = publisherQos;
00580   }
00581 
00582   if (need_evaluate) {
00583     // Check if any existing association need be removed first.
00584     this->reevaluate_existing_associations();
00585 
00586     DCPS_IR_Topic_Description* description = this->topic_->get_topic_description();
00587     description->reevaluate_associations(this);
00588   }
00589 
00590   participant_->get_domain_reference()->publish_publication_bit(this);
00591   specificQos = u_dw_qos?  Update::DataWriterQos:
00592                 u_pub_qos? Update::PublisherQos:
00593                 Update::NoQos;
00594 
00595   return true;
00596 }

Here is the call graph for this function:

Here is the caller graph for this function:

void DCPS_IR_Publication::update_expr_params ( OpenDDS::DCPS::RepoId  readerId,
const DDS::StringSeq params 
)

Definition at line 734 of file DCPS_IR_Publication.cpp.

References CORBA::Exception::_tao_print_exception(), OpenDDS::DCPS::DCPS_debug_level, DCPS_IR_Participant::mark_dead(), participant_, and writer_.

00736 {
00737   try {
00738     writer_->update_subscription_params(readerId, params);
00739   } catch (const CORBA::SystemException& ex) {
00740     if (OpenDDS::DCPS::DCPS_debug_level) {
00741       ex._tao_print_exception("(%P|%t) ERROR: Exception caught in "
00742         "DCPS_IR_Publication::update_expr_params:");
00743     }
00744     participant_->mark_dead();
00745   }
00746 }

Here is the call graph for this function:

void DCPS_IR_Publication::update_incompatible_qos (  ) 

Notify the writer of incompatible qos status and reset the status' count_since_last_send to 0

Definition at line 463 of file DCPS_IR_Publication.cpp.

References CORBA::Exception::_tao_print_exception(), OpenDDS::DCPS::IncompatibleQosStatus::count_since_last_send, OpenDDS::DCPS::DCPS_debug_level, incompatibleQosStatus_, DCPS_IR_Participant::is_alive(), DCPS_IR_Participant::isOwner(), DCPS_IR_Participant::mark_dead(), participant_, and writer_.

Referenced by DCPS_IR_Topic::try_associate(), and DCPS_IR_Topic_Description::try_associate_publication().

00464 {
00465   if (participant_->is_alive() && this->participant_->isOwner()) {
00466     try {
00467       writer_->update_incompatible_qos(incompatibleQosStatus_);
00468       incompatibleQosStatus_.count_since_last_send = 0;
00469     } catch (const CORBA::Exception& ex) {
00470       if (OpenDDS::DCPS::DCPS_debug_level > 0) {
00471         ex._tao_print_exception(
00472           "(%P|%t) ERROR: Exception caught in DCPS_IR_Publication::update_incompatible_qos:");
00473       }
00474 
00475       participant_->mark_dead();
00476     }
00477   }
00478 }

Here is the call graph for this function:

Here is the caller graph for this function:

OpenDDS::DCPS::DataWriterRemote_ptr DCPS_IR_Publication::writer ( void   ) 

Definition at line 659 of file DCPS_IR_Publication.cpp.

References writer_.

Referenced by OpenDDS::Federator::ManagerImpl::pushState().

00660 {
00661   return OpenDDS::DCPS::DataWriterRemote::_duplicate(this->writer_.in());
00662 }

Here is the caller graph for this function:


Member Data Documentation

Definition at line 186 of file DCPS_IR_Publication.h.

Referenced by get_handle(), and set_handle().

Definition at line 192 of file DCPS_IR_Publication.h.

Referenced by get_transportLocatorSeq().

Definition at line 187 of file DCPS_IR_Publication.h.

Referenced by dump_to_string(), is_bit(), and set_bit_status().

Definition at line 193 of file DCPS_IR_Publication.h.

Referenced by get_publisher_qos(), and set_qos().

Definition at line 191 of file DCPS_IR_Publication.h.

Referenced by get_datawriter_qos(), and set_qos().

OpenDDS::DCPS::DataWriterRemote_var DCPS_IR_Publication::writer_ [private]

The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

Generated on 10 Aug 2018 for OpenDDS by  doxygen 1.6.1