#include <OSPFNeighborStateExchange.h>
Inheritance diagram for OSPF::NeighborStateExchange:
Public Member Functions | |
virtual void | ProcessEvent (Neighbor *neighbor, Neighbor::NeighborEventType event) |
virtual Neighbor::NeighborStateType | GetState (void) const |
virtual Neighbor::NeighborStateType OSPF::NeighborStateExchange::GetState | ( | void | ) | const [inline, virtual] |
void OSPF::NeighborStateExchange::ProcessEvent | ( | Neighbor * | neighbor, | |
Neighbor::NeighborEventType | event | |||
) | [virtual] |
Implements OSPF::NeighborState.
00014 { 00015 if ((event == OSPF::Neighbor::KillNeighbor) || (event == OSPF::Neighbor::LinkDown)) { 00016 MessageHandler* messageHandler = neighbor->GetInterface ()->GetArea ()->GetRouter ()->GetMessageHandler (); 00017 neighbor->Reset (); 00018 messageHandler->ClearTimer (neighbor->GetInactivityTimer ()); 00019 ChangeState (neighbor, new OSPF::NeighborStateDown, this); 00020 } 00021 if (event == OSPF::Neighbor::InactivityTimer) { 00022 neighbor->Reset (); 00023 if (neighbor->GetInterface ()->GetType () == OSPF::Interface::NBMA) { 00024 MessageHandler* messageHandler = neighbor->GetInterface ()->GetArea ()->GetRouter ()->GetMessageHandler (); 00025 messageHandler->StartTimer (neighbor->GetPollTimer (), neighbor->GetInterface ()->GetPollInterval ()); 00026 } 00027 ChangeState (neighbor, new OSPF::NeighborStateDown, this); 00028 } 00029 if (event == OSPF::Neighbor::OneWayReceived) { 00030 neighbor->Reset (); 00031 ChangeState (neighbor, new OSPF::NeighborStateInit, this); 00032 } 00033 if (event == OSPF::Neighbor::HelloReceived) { 00034 MessageHandler* messageHandler = neighbor->GetInterface ()->GetArea ()->GetRouter ()->GetMessageHandler (); 00035 messageHandler->ClearTimer (neighbor->GetInactivityTimer ()); 00036 messageHandler->StartTimer (neighbor->GetInactivityTimer (), neighbor->GetRouterDeadInterval ()); 00037 } 00038 if (event == OSPF::Neighbor::IsAdjacencyOK) { 00039 if (!neighbor->NeedAdjacency ()) { 00040 neighbor->Reset (); 00041 ChangeState (neighbor, new OSPF::NeighborStateTwoWay, this); 00042 } 00043 } 00044 if ((event == OSPF::Neighbor::SequenceNumberMismatch) || (event == OSPF::Neighbor::BadLinkStateRequest)) { 00045 MessageHandler* messageHandler = neighbor->GetInterface ()->GetArea ()->GetRouter ()->GetMessageHandler (); 00046 neighbor->Reset (); 00047 neighbor->IncrementDDSequenceNumber (); 00048 neighbor->SendDatabaseDescriptionPacket (true); 00049 messageHandler->StartTimer (neighbor->GetDDRetransmissionTimer (), neighbor->GetInterface ()->GetRetransmissionInterval ()); 00050 ChangeState (neighbor, new OSPF::NeighborStateExchangeStart, this); 00051 } 00052 if (event == OSPF::Neighbor::ExchangeDone) { 00053 if (neighbor->IsLinkStateRequestListEmpty ()) { 00054 MessageHandler* messageHandler = neighbor->GetInterface ()->GetArea ()->GetRouter ()->GetMessageHandler (); 00055 messageHandler->StartTimer (neighbor->GetDDRetransmissionTimer (), neighbor->GetRouterDeadInterval ()); 00056 neighbor->ClearRequestRetransmissionTimer (); 00057 ChangeState (neighbor, new OSPF::NeighborStateFull, this); 00058 } else { 00059 MessageHandler* messageHandler = neighbor->GetInterface ()->GetArea ()->GetRouter ()->GetMessageHandler (); 00060 messageHandler->StartTimer (neighbor->GetDDRetransmissionTimer (), neighbor->GetRouterDeadInterval ()); 00061 ChangeState (neighbor, new OSPF::NeighborStateLoading, this); 00062 } 00063 } 00064 if (event == OSPF::Neighbor::UpdateRetransmissionTimer) { 00065 neighbor->RetransmitUpdatePacket (); 00066 neighbor->StartUpdateRetransmissionTimer (); 00067 } 00068 if (event == OSPF::Neighbor::RequestRetransmissionTimer) { 00069 neighbor->SendLinkStateRequestPacket (); 00070 neighbor->StartRequestRetransmissionTimer (); 00071 } 00072 }