| 237 | } |
| 238 | |
| 239 | DDS::DataReader* |
| 240 | OpenDDS::Model::Delegate::createReader( |
| 241 | DDS::Subscriber* subscriber, |
| 242 | DDS::TopicDescription* topic, |
| 243 | const DDS::DataReaderQos& readerQos, |
| 244 | DDS::StatusMask mask, |
| 245 | const OPENDDS_STRING& transportConfig) |
| 246 | { |
| 247 | // If we specify a transport and have autoenable modeled, |
| 248 | // temporarily turn off autoenabling |
| 249 | bool overridden = false; |
| 250 | bool transportSpecified = !transportConfig.empty(); |
| 251 | |
| 252 | // If transport config was specified |
| 253 | if (transportSpecified) { |
| 254 | overridden = override_autoenabled_qos(subscriber); |
| 255 | } |
| 256 | |
| 257 | DDS::DataReader_ptr dataReader = subscriber->create_datareader( |
| 258 | topic, |
| 259 | readerQos, |
| 260 | DDS::DataReaderListener::_nil(), |
| 261 | mask |
| 262 | ); |
| 263 | |
| 264 | if (transportSpecified) { |
| 265 | // Restore autoenabling if necessary |
| 266 | if (overridden) { |
| 267 | restore_autoenabled_qos(subscriber); |
| 268 | } |
| 269 | // bind to specified transport |
| 270 | TheTransportRegistry->bind_config(transportConfig, dataReader); |
| 271 | } |
| 272 | return dataReader; |
| 273 | } |
| 274 | |
| 275 | bool |
| 276 | OpenDDS::Model::Delegate::override_autoenabled_qos( |
no test coverage detected