OSPF::LinkStateAcknowledgementHandler Class Reference

#include <LinkStateAcknowledgementHandler.h>

Inheritance diagram for OSPF::LinkStateAcknowledgementHandler:

OSPF::IMessageHandler

List of all members.

Public Member Functions

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


Constructor & Destructor Documentation

OSPF::LinkStateAcknowledgementHandler::LinkStateAcknowledgementHandler ( OSPF::Router containingRouter  ) 

00021                                                                                                  :
00022     OSPF::IMessageHandler(containingRouter)
00023 {
00024 }


Member Function Documentation

void OSPF::LinkStateAcknowledgementHandler::ProcessPacket ( OSPFPacket *  packet,
OSPF::Interface intf,
OSPF::Neighbor neighbor 
) [virtual]

Implements OSPF::IMessageHandler.

Referenced by OSPF::MessageHandler::ProcessPacket().

00027 {
00028     router->GetMessageHandler()->PrintEvent("Link State Acknowledgement packet received", intf, neighbor);
00029 
00030     if (neighbor->GetState() >= OSPF::Neighbor::ExchangeState) {
00031         OSPFLinkStateAcknowledgementPacket* lsAckPacket = check_and_cast<OSPFLinkStateAcknowledgementPacket*> (packet);
00032 
00033         int  lsaCount = lsAckPacket->getLsaHeadersArraySize();
00034 
00035         EV << "  Processing packet contents:\n";
00036 
00037         for (int i  = 0; i < lsaCount; i++) {
00038             OSPFLSAHeader&   lsaHeader = lsAckPacket->getLsaHeaders(i);
00039             OSPFLSA*         lsaOnRetransmissionList;
00040             OSPF::LSAKeyType lsaKey;
00041 
00042             EV << "    ";
00043             PrintLSAHeader(lsaHeader, ev.getOStream());
00044             EV << "\n";
00045 
00046             lsaKey.linkStateID = lsaHeader.getLinkStateID();
00047             lsaKey.advertisingRouter = lsaHeader.getAdvertisingRouter().getInt();
00048 
00049             if ((lsaOnRetransmissionList = neighbor->FindOnRetransmissionList(lsaKey)) != NULL) {
00050                 if (operator== (lsaHeader, lsaOnRetransmissionList->getHeader())) {
00051                     neighbor->RemoveFromRetransmissionList(lsaKey);
00052                 } else {
00053                     EV << "Got an Acknowledgement packet for an unsent Update packet.\n";
00054                 }
00055             }
00056         }
00057         if (neighbor->IsLinkStateRetransmissionListEmpty()) {
00058             neighbor->ClearUpdateRetransmissionTimer();
00059         }
00060     }
00061 }


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

Generated on Fri Mar 20 18:51:23 2009 for INET Framework for OMNeT++/OMNEST by  doxygen 1.5.5