MCPcopy Create free account
hub / github.com/OpenDDS/OpenDDS / sample_received

Method sample_received

dds/DCPS/transport/multicast/MulticastDataLink.cpp:294–356  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

292}
293
294void
295MulticastDataLink::sample_received(ReceivedDataSample& sample)
296{
297 switch (sample.header_.message_id_) {
298 case TRANSPORT_CONTROL: {
299 // Transport control samples are delivered to all sessions
300 // regardless of association status:
301 {
302 Message_Block_Ptr payload(sample.data());
303 char* const ptr = payload ? payload->rd_ptr() : 0;
304
305 ACE_GUARD(ACE_SYNCH_RECURSIVE_MUTEX,
306 guard,
307 this->session_lock_);
308
309 const TransportHeader& theader = receive_strategy()->received_header();
310
311 if (!is_active() && sample.header_.submessage_id_ == MULTICAST_SYN &&
312 sessions_.find(theader.source_) == sessions_.end()) {
313 // We have received a SYN but there is no session (yet) for this source.
314 // Depending on the data, we may need to send SYNACK.
315
316 guard.release();
317 syn_received_no_session(theader.source_, payload,
318 theader.swap_bytes());
319
320 guard.acquire();
321 MulticastSessionMap::iterator s_itr = sessions_.find(theader.source_);
322 if (s_itr != sessions_.end()) {
323 s_itr->second->record_header_received(theader);
324 }
325
326 if (ptr) {
327 payload->rd_ptr(ptr);
328 }
329 return;
330 }
331
332 MulticastSessionMap temp_sessions(sessions_);
333 guard.release();
334
335 for (MulticastSessionMap::iterator it(temp_sessions.begin());
336 it != temp_sessions.end(); ++it) {
337 it->second->control_received(sample.header_.submessage_id_,
338 payload);
339 it->second->record_header_received(theader);
340
341 // reset read pointer
342 if (ptr) {
343 payload->rd_ptr(ptr);
344 }
345 }
346 }
347 } break;
348
349 default:
350
351 if (ready_to_deliver(sample)) {

Callers 1

deliver_sampleMethod · 0.80

Calls 9

swap_bytesMethod · 0.80
acquireMethod · 0.80
dataMethod · 0.45
findMethod · 0.45
endMethod · 0.45
releaseMethod · 0.45
beginMethod · 0.45
control_receivedMethod · 0.45

Tested by

no test coverage detected