#include <OSPFNeighborStateLoading.h>
Public Member Functions | |
virtual void | ProcessEvent (Neighbor *neighbor, Neighbor::NeighborEventType event) |
virtual Neighbor::NeighborStateType | GetState (void) const |
void OSPF::NeighborStateLoading::ProcessEvent | ( | OSPF::Neighbor * | neighbor, | |
Neighbor::NeighborEventType | event | |||
) | [virtual] |
Implements OSPF::NeighborState.
00030 { 00031 if ((event == OSPF::Neighbor::KillNeighbor) || (event == OSPF::Neighbor::LinkDown)) { 00032 MessageHandler* messageHandler = neighbor->GetInterface()->GetArea()->GetRouter()->GetMessageHandler(); 00033 neighbor->Reset(); 00034 messageHandler->ClearTimer(neighbor->GetInactivityTimer()); 00035 ChangeState(neighbor, new OSPF::NeighborStateDown, this); 00036 } 00037 if (event == OSPF::Neighbor::InactivityTimer) { 00038 neighbor->Reset(); 00039 if (neighbor->GetInterface()->GetType() == OSPF::Interface::NBMA) { 00040 MessageHandler* messageHandler = neighbor->GetInterface()->GetArea()->GetRouter()->GetMessageHandler(); 00041 messageHandler->StartTimer(neighbor->GetPollTimer(), neighbor->GetInterface()->GetPollInterval()); 00042 } 00043 ChangeState(neighbor, new OSPF::NeighborStateDown, this); 00044 } 00045 if (event == OSPF::Neighbor::OneWayReceived) { 00046 neighbor->Reset(); 00047 ChangeState(neighbor, new OSPF::NeighborStateInit, this); 00048 } 00049 if (event == OSPF::Neighbor::HelloReceived) { 00050 MessageHandler* messageHandler = neighbor->GetInterface()->GetArea()->GetRouter()->GetMessageHandler(); 00051 messageHandler->ClearTimer(neighbor->GetInactivityTimer()); 00052 messageHandler->StartTimer(neighbor->GetInactivityTimer(), neighbor->GetRouterDeadInterval()); 00053 } 00054 if (event == OSPF::Neighbor::LoadingDone) { 00055 neighbor->ClearRequestRetransmissionTimer(); 00056 ChangeState(neighbor, new OSPF::NeighborStateFull, this); 00057 } 00058 if (event == OSPF::Neighbor::IsAdjacencyOK) { 00059 if (!neighbor->NeedAdjacency()) { 00060 neighbor->Reset(); 00061 ChangeState(neighbor, new OSPF::NeighborStateTwoWay, this); 00062 } 00063 } 00064 if ((event == OSPF::Neighbor::SequenceNumberMismatch) || (event == OSPF::Neighbor::BadLinkStateRequest)) { 00065 MessageHandler* messageHandler = neighbor->GetInterface()->GetArea()->GetRouter()->GetMessageHandler(); 00066 neighbor->Reset(); 00067 neighbor->IncrementDDSequenceNumber(); 00068 neighbor->SendDatabaseDescriptionPacket(true); 00069 messageHandler->StartTimer(neighbor->GetDDRetransmissionTimer(), neighbor->GetInterface()->GetRetransmissionInterval()); 00070 ChangeState(neighbor, new OSPF::NeighborStateExchangeStart, this); 00071 } 00072 if (event == OSPF::Neighbor::RequestRetransmissionTimer) { 00073 neighbor->SendLinkStateRequestPacket(); 00074 neighbor->StartRequestRetransmissionTimer(); 00075 } 00076 if (event == OSPF::Neighbor::UpdateRetransmissionTimer) { 00077 neighbor->RetransmitUpdatePacket(); 00078 neighbor->StartUpdateRetransmissionTimer(); 00079 } 00080 if (event == OSPF::Neighbor::DDRetransmissionTimer) { 00081 neighbor->DeleteLastSentDDPacket(); 00082 } 00083 }
virtual Neighbor::NeighborStateType OSPF::NeighborStateLoading::GetState | ( | void | ) | const [inline, virtual] |