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