#include <ECG_CDR_Message_Receiver.h>
Public Member Functions | |
int | read (char *header, size_t bytes_received, CORBA::Boolean checkcrc=0) |
Public Attributes | |
int | byte_order |
CORBA::ULong | request_id |
CORBA::ULong | request_size |
CORBA::ULong | fragment_size |
CORBA::ULong | fragment_offset |
CORBA::ULong | fragment_id |
CORBA::ULong | fragment_count |
CORBA::ULong | crc |
Definition at line 240 of file ECG_CDR_Message_Receiver.h.
int TAO_ECG_CDR_Message_Receiver::Mcast_Header::read | ( | char * | header, | |
size_t | bytes_received, | |||
CORBA::Boolean | checkcrc = 0 | |||
) |
Definition at line 530 of file ECG_CDR_Message_Receiver.cpp.
References ACE_ERROR_RETURN, ACE_NTOHL, byte_order, crc, TAO_ECG_CDR_Message_Sender::ECG_HEADER_SIZE, LM_ERROR, ACE_InputCDR::read_boolean(), ACE_InputCDR::read_octet(), ACE_InputCDR::read_octet_array(), and ACE_InputCDR::read_ulong().
Referenced by TAO_ECG_CDR_Message_Receiver::handle_input().
00533 { 00534 // Decode. 00535 this->byte_order = header[0]; 00536 if(this->byte_order != 0 && this->byte_order != 1) 00537 { 00538 ACE_ERROR_RETURN ((LM_ERROR, "Reading mcast packet header: byte " 00539 "order is neither 0 nor 1, it is %d.\n", 00540 this->byte_order), 00541 -1); 00542 } 00543 00544 TAO_InputCDR header_cdr (header, 00545 TAO_ECG_CDR_Message_Sender::ECG_HEADER_SIZE, 00546 byte_order); 00547 CORBA::Boolean unused; 00548 CORBA::Octet a, b, c; 00549 if (!header_cdr.read_boolean (unused) 00550 || !header_cdr.read_octet (a) 00551 || !header_cdr.read_octet (b) 00552 || !header_cdr.read_octet (c) 00553 || a != 'A' || b != 'B' || c != 'C') 00554 { 00555 ACE_ERROR_RETURN ((LM_ERROR, "Error reading magic bytes " 00556 "in mcast packet header.\n"), 00557 -1); 00558 } 00559 00560 if (!header_cdr.read_ulong (this->request_id) 00561 || !header_cdr.read_ulong (this->request_size) 00562 || !header_cdr.read_ulong (this->fragment_size) 00563 || !header_cdr.read_ulong (this->fragment_offset) 00564 || !header_cdr.read_ulong (this->fragment_id) 00565 || !header_cdr.read_ulong (this->fragment_count)) 00566 { 00567 ACE_ERROR_RETURN ((LM_ERROR, 00568 "Error decoding mcast packet header.\n"), 00569 -1); 00570 } 00571 00572 if (checkcrc) 00573 { 00574 CORBA::Octet padding[4]; 00575 header_cdr.read_octet_array (padding, 4); 00576 00577 unsigned char *crcparts = (unsigned char *)(&this->crc); 00578 00579 for (int cnt=0; cnt != 4; ++cnt) 00580 { 00581 crcparts[cnt] = padding[cnt]; 00582 } 00583 00584 this->crc = ACE_NTOHL (this->crc); 00585 } 00586 00587 // Validate. 00588 size_t const data_bytes_received = 00589 bytes_received - TAO_ECG_CDR_Message_Sender::ECG_HEADER_SIZE; 00590 00591 if (this->request_size < this->fragment_size 00592 || this->fragment_offset >= this->request_size 00593 || this->fragment_id >= this->fragment_count 00594 || (this->fragment_count == 1 00595 && (this->fragment_size != this->request_size 00596 || this->request_size != data_bytes_received))) 00597 { 00598 ACE_ERROR_RETURN ((LM_ERROR, 00599 "Invalid mcast fragment: " 00600 "inconsistent header fields.\n"), 00601 -1); 00602 } 00603 00604 return 0; 00605 }
Definition at line 242 of file ECG_CDR_Message_Receiver.h.
Referenced by TAO_ECG_CDR_Message_Receiver::handle_input(), TAO_ECG_CDR_Message_Receiver::process_fragment(), and read().
Definition at line 249 of file ECG_CDR_Message_Receiver.h.
Referenced by TAO_ECG_CDR_Message_Receiver::handle_input(), and read().
Definition at line 248 of file ECG_CDR_Message_Receiver.h.
Referenced by TAO_ECG_CDR_Message_Receiver::handle_input(), and TAO_ECG_CDR_Message_Receiver::process_fragment().
Definition at line 247 of file ECG_CDR_Message_Receiver.h.
Referenced by TAO_ECG_CDR_Message_Receiver::process_fragment().
Definition at line 246 of file ECG_CDR_Message_Receiver.h.
Referenced by TAO_ECG_CDR_Message_Receiver::process_fragment().
Definition at line 245 of file ECG_CDR_Message_Receiver.h.
Referenced by TAO_ECG_CDR_Message_Receiver::process_fragment().
Definition at line 243 of file ECG_CDR_Message_Receiver.h.
Referenced by TAO_ECG_CDR_Message_Receiver::handle_input(), and TAO_ECG_CDR_Message_Receiver::process_fragment().
Definition at line 244 of file ECG_CDR_Message_Receiver.h.
Referenced by TAO_ECG_CDR_Message_Receiver::handle_input(), and TAO_ECG_CDR_Message_Receiver::process_fragment().