INET Framework for OMNeT++/OMNEST
AnsaOSPFNeighborStateAttempt.cc
Go to the documentation of this file.
00001 #include "AnsaOSPFNeighborStateAttempt.h"
00002 #include "AnsaOSPFNeighborStateDown.h"
00003 #include "AnsaOSPFNeighborStateInit.h"
00004 #include "AnsaMessageHandler.h"
00005 #include "AnsaOSPFInterface.h"
00006 #include "AnsaOSPFArea.h"
00007 #include "AnsaOSPFRouter.h"
00008 
00009 void AnsaOSPF::NeighborStateAttempt::ProcessEvent(AnsaOSPF::Neighbor* neighbor, AnsaOSPF::Neighbor::NeighborEventType event)
00010 {
00011     if ((event == AnsaOSPF::Neighbor::KillNeighbor) || (event == AnsaOSPF::Neighbor::LinkDown)) {
00012         MessageHandler* messageHandler = neighbor->GetInterface()->GetArea()->GetRouter()->GetMessageHandler();
00013         neighbor->Reset();
00014         messageHandler->ClearTimer(neighbor->GetInactivityTimer());
00015         ChangeState(neighbor, new AnsaOSPF::NeighborStateDown, this);
00016     }
00017     if (event == AnsaOSPF::Neighbor::InactivityTimer) {
00018         neighbor->Reset();
00019         if (neighbor->GetInterface()->GetType() == AnsaOSPF::Interface::NBMA) {
00020             MessageHandler* messageHandler = neighbor->GetInterface()->GetArea()->GetRouter()->GetMessageHandler();
00021             messageHandler->StartTimer(neighbor->GetPollTimer(), neighbor->GetInterface()->GetPollInterval());
00022         }
00023         ChangeState(neighbor, new AnsaOSPF::NeighborStateDown, this);
00024     }
00025     if (event == AnsaOSPF::Neighbor::HelloReceived) {
00026         MessageHandler* messageHandler = neighbor->GetInterface()->GetArea()->GetRouter()->GetMessageHandler();
00027         messageHandler->ClearTimer(neighbor->GetInactivityTimer());
00028         messageHandler->StartTimer(neighbor->GetInactivityTimer(), neighbor->GetRouterDeadInterval());
00029         ChangeState(neighbor, new AnsaOSPF::NeighborStateInit, this);
00030     }
00031 }