INET Framework for OMNeT++/OMNEST
AnsaOSPFNeighborStateInit.cc
Go to the documentation of this file.
00001 #include "AnsaOSPFNeighborStateInit.h"
00002 #include "AnsaOSPFNeighborStateDown.h"
00003 #include "AnsaOSPFNeighborStateExchangeStart.h"
00004 #include "AnsaOSPFNeighborStateTwoWay.h"
00005 #include "AnsaMessageHandler.h"
00006 #include "AnsaOSPFInterface.h"
00007 #include "AnsaOSPFArea.h"
00008 #include "AnsaOSPFRouter.h"
00009 
00010 void AnsaOSPF::NeighborStateInit::ProcessEvent(AnsaOSPF::Neighbor* neighbor, AnsaOSPF::Neighbor::NeighborEventType event)
00011 {
00012     if ((event == AnsaOSPF::Neighbor::KillNeighbor) || (event == AnsaOSPF::Neighbor::LinkDown)) {
00013         MessageHandler* messageHandler = neighbor->GetInterface()->GetArea()->GetRouter()->GetMessageHandler();
00014         neighbor->Reset();
00015         messageHandler->ClearTimer(neighbor->GetInactivityTimer());
00016         ChangeState(neighbor, new AnsaOSPF::NeighborStateDown, this);
00017     }
00018     if (event == AnsaOSPF::Neighbor::InactivityTimer) {
00019         neighbor->Reset();
00020         if (neighbor->GetInterface()->GetType() == AnsaOSPF::Interface::NBMA) {
00021             MessageHandler* messageHandler = neighbor->GetInterface()->GetArea()->GetRouter()->GetMessageHandler();
00022             messageHandler->StartTimer(neighbor->GetPollTimer(), neighbor->GetInterface()->GetPollInterval());
00023         }
00024         ChangeState(neighbor, new AnsaOSPF::NeighborStateDown, this);
00025     }
00026     if (event == AnsaOSPF::Neighbor::HelloReceived) {
00027         MessageHandler* messageHandler = neighbor->GetInterface()->GetArea()->GetRouter()->GetMessageHandler();
00028         messageHandler->ClearTimer(neighbor->GetInactivityTimer());
00029         messageHandler->StartTimer(neighbor->GetInactivityTimer(), neighbor->GetRouterDeadInterval());
00030     }
00031     if (event == AnsaOSPF::Neighbor::TwoWayReceived) {
00032         if (neighbor->NeedAdjacency()) {
00033             MessageHandler* messageHandler = neighbor->GetInterface()->GetArea()->GetRouter()->GetMessageHandler();
00034             if (!(neighbor->IsFirstAdjacencyInited())) {
00035                 neighbor->InitFirstAdjacency();
00036             } else {
00037                 neighbor->IncrementDDSequenceNumber();
00038             }
00039             neighbor->SendDatabaseDescriptionPacket(true);
00040             messageHandler->StartTimer(neighbor->GetDDRetransmissionTimer(), neighbor->GetInterface()->GetRetransmissionInterval());
00041             ChangeState(neighbor, new AnsaOSPF::NeighborStateExchangeStart, this);
00042         } else {
00043             ChangeState(neighbor, new AnsaOSPF::NeighborStateTwoWay, this);
00044         }
00045     }
00046 }