EventHelix.com: CASE Tools; Real-time and Embedded System Design; Object Oriented Design EventStudio 2.0: System Engineering CASE ToolEventStudio 2.5
Sequence diagram based system design and modeling
Home   What's New   EventStudio 2.5   Real-time Mantra   Thought Projects   Contact Us
Main Page | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members

Receive_Protocol_Handler.h

Go to the documentation of this file.
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 };

Generated on Sun Feb 13 21:30:17 2005 for Object Oriented Design Examples by doxygen 1.3.4
 Home   What's New   EventStudio 2.5   Real-time Mantra   Thought Projects   Contact Us
Copyright © 2000-2005 EventHelix.com Inc. All Rights Reserved.