INET Framework for OMNeT++/OMNEST
AnsaOSPF::NeighborStateExchange Class Reference

#include <AnsaOSPFNeighborStateExchange.h>

Inheritance diagram for AnsaOSPF::NeighborStateExchange:
AnsaOSPF::NeighborState

List of all members.

Public Member Functions

virtual void ProcessEvent (Neighbor *neighbor, Neighbor::NeighborEventType event)
virtual Neighbor::NeighborStateType GetState (void) const

Detailed Description

Definition at line 8 of file AnsaOSPFNeighborStateExchange.h.


Member Function Documentation

virtual Neighbor::NeighborStateType AnsaOSPF::NeighborStateExchange::GetState ( void  ) const [inline, virtual]

Implements AnsaOSPF::NeighborState.

Definition at line 12 of file AnsaOSPFNeighborStateExchange.h.

Implements AnsaOSPF::NeighborState.

Definition at line 13 of file AnsaOSPFNeighborStateExchange.cc.

{
    if ((event == AnsaOSPF::Neighbor::KillNeighbor) || (event == AnsaOSPF::Neighbor::LinkDown)) {
        MessageHandler* messageHandler = neighbor->GetInterface()->GetArea()->GetRouter()->GetMessageHandler();
        neighbor->Reset();
        messageHandler->ClearTimer(neighbor->GetInactivityTimer());
        ChangeState(neighbor, new AnsaOSPF::NeighborStateDown, this);
    }
    if (event == AnsaOSPF::Neighbor::InactivityTimer) {
        neighbor->Reset();
        if (neighbor->GetInterface()->GetType() == AnsaOSPF::Interface::NBMA) {
            MessageHandler* messageHandler = neighbor->GetInterface()->GetArea()->GetRouter()->GetMessageHandler();
            messageHandler->StartTimer(neighbor->GetPollTimer(), neighbor->GetInterface()->GetPollInterval());
        }
        ChangeState(neighbor, new AnsaOSPF::NeighborStateDown, this);
    }
    if (event == AnsaOSPF::Neighbor::OneWayReceived) {
        neighbor->Reset();
        ChangeState(neighbor, new AnsaOSPF::NeighborStateInit, this);
    }
    if (event == AnsaOSPF::Neighbor::HelloReceived) {
        MessageHandler* messageHandler = neighbor->GetInterface()->GetArea()->GetRouter()->GetMessageHandler();
        messageHandler->ClearTimer(neighbor->GetInactivityTimer());
        messageHandler->StartTimer(neighbor->GetInactivityTimer(), neighbor->GetRouterDeadInterval());
    }
    if (event == AnsaOSPF::Neighbor::IsAdjacencyOK) {
        if (!neighbor->NeedAdjacency()) {
            neighbor->Reset();
            ChangeState(neighbor, new AnsaOSPF::NeighborStateTwoWay, this);
        }
    }
    if ((event == AnsaOSPF::Neighbor::SequenceNumberMismatch) || (event == AnsaOSPF::Neighbor::BadLinkStateRequest)) {
        MessageHandler* messageHandler = neighbor->GetInterface()->GetArea()->GetRouter()->GetMessageHandler();
        neighbor->Reset();
        neighbor->IncrementDDSequenceNumber();
        neighbor->SendDatabaseDescriptionPacket(true);
        messageHandler->StartTimer(neighbor->GetDDRetransmissionTimer(), neighbor->GetInterface()->GetRetransmissionInterval());
        ChangeState(neighbor, new AnsaOSPF::NeighborStateExchangeStart, this);
    }
    if (event == AnsaOSPF::Neighbor::ExchangeDone) {
        if (neighbor->IsLinkStateRequestListEmpty()) {
            MessageHandler* messageHandler = neighbor->GetInterface()->GetArea()->GetRouter()->GetMessageHandler();
            messageHandler->StartTimer(neighbor->GetDDRetransmissionTimer(), neighbor->GetRouterDeadInterval());
            neighbor->ClearRequestRetransmissionTimer();
            ChangeState(neighbor, new AnsaOSPF::NeighborStateFull, this);
        } else {
            MessageHandler* messageHandler = neighbor->GetInterface()->GetArea()->GetRouter()->GetMessageHandler();
            messageHandler->StartTimer(neighbor->GetDDRetransmissionTimer(), neighbor->GetRouterDeadInterval());
            ChangeState(neighbor, new AnsaOSPF::NeighborStateLoading, this);
        }
    }
    if (event == AnsaOSPF::Neighbor::UpdateRetransmissionTimer) {
        neighbor->RetransmitUpdatePacket();
        neighbor->StartUpdateRetransmissionTimer();
    }
    if (event == AnsaOSPF::Neighbor::RequestRetransmissionTimer) {
        neighbor->SendLinkStateRequestPacket();
        neighbor->StartRequestRetransmissionTimer();
    }
}

The documentation for this class was generated from the following files: