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