INET Framework for OMNeT++/OMNEST
AnsaOSPFNeighborStateDown.cc
Go to the documentation of this file.
00001 #include "AnsaOSPFNeighborStateDown.h"
00002 #include "AnsaOSPFNeighborStateAttempt.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::NeighborStateDown::ProcessEvent(AnsaOSPF::Neighbor* neighbor, AnsaOSPF::Neighbor::NeighborEventType event)
00010 {
00011     if (event == AnsaOSPF::Neighbor::Start) {
00012         MessageHandler* messageHandler = neighbor->GetInterface()->GetArea()->GetRouter()->GetMessageHandler();
00013         int             ttl            = (neighbor->GetInterface()->GetType() == AnsaOSPF::Interface::Virtual) ? VIRTUAL_LINK_TTL : 1;
00014 
00015         messageHandler->ClearTimer(neighbor->GetPollTimer());
00016         neighbor->GetInterface()->SendHelloPacket(neighbor->GetAddress(), ttl);
00017         messageHandler->StartTimer(neighbor->GetInactivityTimer(), neighbor->GetRouterDeadInterval());
00018         ChangeState(neighbor, new AnsaOSPF::NeighborStateAttempt, this);
00019     }
00020     if (event == AnsaOSPF::Neighbor::HelloReceived) {
00021         MessageHandler* messageHandler = neighbor->GetInterface()->GetArea()->GetRouter()->GetMessageHandler();
00022         messageHandler->ClearTimer(neighbor->GetPollTimer());
00023         messageHandler->StartTimer(neighbor->GetInactivityTimer(), neighbor->GetRouterDeadInterval());
00024         ChangeState(neighbor, new AnsaOSPF::NeighborStateInit, this);
00025     }
00026     if (event == AnsaOSPF::Neighbor::PollTimer) {
00027         int ttl = (neighbor->GetInterface()->GetType() == AnsaOSPF::Interface::Virtual) ? VIRTUAL_LINK_TTL : 1;
00028         neighbor->GetInterface()->SendHelloPacket(neighbor->GetAddress(), ttl);
00029         MessageHandler* messageHandler = neighbor->GetInterface()->GetArea()->GetRouter()->GetMessageHandler();
00030         messageHandler->StartTimer(neighbor->GetPollTimer(), neighbor->GetInterface()->GetPollInterval());
00031     }
00032 }