| EventStudio 2.5 Sequence diagram based system design and modeling | |
00001 00002 00003 00004 00005 00006 00007 00008 00009 #include "Transmit_Protocol_Handler.h" 00010 00019 00020 class Receive_Protocol_Handler 00021 { 00022 enum {L2_HEADER_LENGTH=8}; 00023 00025 int m_next_Expected_Sequence_Number; 00026 00030 int m_last_Acknowledged_Sequence_Number; 00031 00033 Transmit_Protocol_Handler *m_p_Transmit_Protocol_Handler; 00034 00036 Protocol_Layer *m_p_Layer; 00037 00038 public: 00039 00057 00058 void Handle_Received_Packet(Datagram *p_Packet) 00059 { 00060 // Extract the header needed by this layer 00061 p_Packet->Extract_Header(L2_HEADER_LENGTH); 00062 00063 // Compare the packet's transmit sequence number with 00064 // the expected sequence number 00065 if (p_Packet->Get_Transmit_Sequence_Number() == m_next_Expected_Sequence_Number) 00066 { 00067 // Request Transmit Sequence Handler to acknowledge 00068 // the just received packet 00069 m_p_Transmit_Protocol_Handler->Handle_Send_Ack_Request(m_next_Expected_Sequence_Number); 00070 00071 // Pass the message to the higher layer. The message is passed only if the upper layer 00072 // has been specified. 00073 Protocol_Layer *p_Upper_Layer = m_p_Layer->Get_Upper_Layer(); 00074 if (p_Upper_Layer) 00075 { 00076 p_Upper_Layer->Handle_Receive(p_Packet); 00077 } 00078 00079 // Modulo increment the next expected sequence number 00080 Modulo_Increment(m_next_Expected_Sequence_Number); 00081 } 00082 00083 // Compare the packet's receive sequence number with the 00084 // last acknowledged sequence number. (Change in sequence number 00085 // implies that an acknowledgement has been received from the other end) 00086 if (p_Packet->Get_Receive_Sequence_Number() != m_last_Acknowledged_Sequence_Number) 00087 { 00088 // Update the last acknowledged sequence number 00089 m_last_Acknowledged_Sequence_Number = p_Packet->Get_Receive_Sequence_Number(); 00090 00091 // Inform the Transmit Protocol Handler about the 00092 // acknowledgements received from the other end 00093 m_p_Transmit_Protocol_Handler->Handle_Received_Ack_Notification( 00094 m_last_Acknowledged_Sequence_Number); 00095 } 00096 } 00097 00106 00107 Receive_Protocol_Handler(Protocol_Layer *p_Layer) : 00108 m_p_Layer(p_Layer) 00109 { 00110 } 00111 };
1.3.4 | |
| Copyright © 2000-2005 EventHelix.com Inc. All Rights Reserved. |