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