INET Framework for OMNeT++/OMNEST
AnsaOspf6::LinkStateAcknowledgementHandler Class Reference

#include <ansaLinkStateAcknowledgementHandler6.h>

Inheritance diagram for AnsaOspf6::LinkStateAcknowledgementHandler:
AnsaOspf6::IMessageHandler

List of all members.

Public Member Functions

 LinkStateAcknowledgementHandler (Router *containingRouter)
void ProcessPacket (OspfPacket6 *packet, Interface *intf, Neighbor *neighbor)

Detailed Description

Definition at line 23 of file ansaLinkStateAcknowledgementHandler6.h.


Constructor & Destructor Documentation


Member Function Documentation

Implements AnsaOspf6::IMessageHandler.

Definition at line 24 of file ansaLinkStateAcknowledgementHandler6.cc.

                                                                                                                                      {
   router->GetMessageHandler()->PrintEvent("Link State Acknowledgement packet received", intf, neighbor);

   if (neighbor->GetState() >= AnsaOspf6::Neighbor::ExchangeState){

      OspfLinkStateAcknowledgementPacket6* lsAckPacket = check_and_cast<OspfLinkStateAcknowledgementPacket6*> (packet);
      int lsaCount = lsAckPacket->getLsaHeadersArraySize();

      EV<< "  Processing packet contents:\n";

      for (int i = 0; i < lsaCount; i++){
         OspfLsaHeader6& lsaHeader = lsAckPacket->getLsaHeaders(i);
         OspfLsa6* lsaOnRetransmissionList;
         AnsaOspf6::LsaKeyType6 lsaKey;

         EV << "    ";
         PrintLsaHeader6(lsaHeader, ev.getOStream());
         EV << "\n";

         lsaKey.linkStateID = lsaHeader.getLinkStateID();
         lsaKey.advertisingRouter = lsaHeader.getAdvertisingRouter();

         if ((lsaOnRetransmissionList = neighbor->FindOnRetransmissionList(lsaKey)) != NULL){
               if (operator== (lsaHeader, lsaOnRetransmissionList->getHeader())) {
                   neighbor->RemoveFromRetransmissionList(lsaKey);
               } else {
                   EV << "Got an Acknowledgement packet for an unsent Update packet.\n";
               }
           }
       }
       if (neighbor->IsLinkStateRetransmissionListEmpty()) {
           neighbor->ClearUpdateRetransmissionTimer();
       }
   }
}

The documentation for this class was generated from the following files: