#include <OSPFNeighborStateLoading.h>
Inheritance diagram for OSPF::NeighborStateLoading:
Public Member Functions | |
virtual void | ProcessEvent (Neighbor *neighbor, Neighbor::NeighborEventType event) |
virtual Neighbor::NeighborStateType | GetState (void) const |
virtual Neighbor::NeighborStateType OSPF::NeighborStateLoading::GetState | ( | void | ) | const [inline, virtual] |
void OSPF::NeighborStateLoading::ProcessEvent | ( | Neighbor * | neighbor, | |
Neighbor::NeighborEventType | event | |||
) | [virtual] |
Implements OSPF::NeighborState.
00013 { 00014 if ((event == OSPF::Neighbor::KillNeighbor) || (event == OSPF::Neighbor::LinkDown)) { 00015 MessageHandler* messageHandler = neighbor->GetInterface ()->GetArea ()->GetRouter ()->GetMessageHandler (); 00016 neighbor->Reset (); 00017 messageHandler->ClearTimer (neighbor->GetInactivityTimer ()); 00018 ChangeState (neighbor, new OSPF::NeighborStateDown, this); 00019 } 00020 if (event == OSPF::Neighbor::InactivityTimer) { 00021 neighbor->Reset (); 00022 if (neighbor->GetInterface ()->GetType () == OSPF::Interface::NBMA) { 00023 MessageHandler* messageHandler = neighbor->GetInterface ()->GetArea ()->GetRouter ()->GetMessageHandler (); 00024 messageHandler->StartTimer (neighbor->GetPollTimer (), neighbor->GetInterface ()->GetPollInterval ()); 00025 } 00026 ChangeState (neighbor, new OSPF::NeighborStateDown, this); 00027 } 00028 if (event == OSPF::Neighbor::OneWayReceived) { 00029 neighbor->Reset (); 00030 ChangeState (neighbor, new OSPF::NeighborStateInit, this); 00031 } 00032 if (event == OSPF::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 == OSPF::Neighbor::LoadingDone) { 00038 neighbor->ClearRequestRetransmissionTimer (); 00039 ChangeState (neighbor, new OSPF::NeighborStateFull, this); 00040 } 00041 if (event == OSPF::Neighbor::IsAdjacencyOK) { 00042 if (!neighbor->NeedAdjacency ()) { 00043 neighbor->Reset (); 00044 ChangeState (neighbor, new OSPF::NeighborStateTwoWay, this); 00045 } 00046 } 00047 if ((event == OSPF::Neighbor::SequenceNumberMismatch) || (event == OSPF::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 OSPF::NeighborStateExchangeStart, this); 00054 } 00055 if (event == OSPF::Neighbor::RequestRetransmissionTimer) { 00056 neighbor->SendLinkStateRequestPacket (); 00057 neighbor->StartRequestRetransmissionTimer (); 00058 } 00059 if (event == OSPF::Neighbor::UpdateRetransmissionTimer) { 00060 neighbor->RetransmitUpdatePacket (); 00061 neighbor->StartUpdateRetransmissionTimer (); 00062 } 00063 if (event == OSPF::Neighbor::DDRetransmissionTimer) { 00064 neighbor->DeleteLastSentDDPacket (); 00065 } 00066 }