#include <OSPFNeighborStateTwoWay.h>
Inheritance diagram for OSPF::NeighborStateTwoWay:
Public Member Functions | |
virtual void | ProcessEvent (Neighbor *neighbor, Neighbor::NeighborEventType event) |
virtual Neighbor::NeighborStateType | GetState (void) const |
virtual Neighbor::NeighborStateType OSPF::NeighborStateTwoWay::GetState | ( | void | ) | const [inline, virtual] |
void OSPF::NeighborStateTwoWay::ProcessEvent | ( | Neighbor * | neighbor, | |
Neighbor::NeighborEventType | event | |||
) | [virtual] |
Implements OSPF::NeighborState.
00011 { 00012 if ((event == OSPF::Neighbor::KillNeighbor) || (event == OSPF::Neighbor::LinkDown)) { 00013 MessageHandler* messageHandler = neighbor->GetInterface ()->GetArea ()->GetRouter ()->GetMessageHandler (); 00014 neighbor->Reset (); 00015 messageHandler->ClearTimer (neighbor->GetInactivityTimer ()); 00016 ChangeState (neighbor, new OSPF::NeighborStateDown, this); 00017 } 00018 if (event == OSPF::Neighbor::InactivityTimer) { 00019 neighbor->Reset (); 00020 if (neighbor->GetInterface ()->GetType () == OSPF::Interface::NBMA) { 00021 MessageHandler* messageHandler = neighbor->GetInterface ()->GetArea ()->GetRouter ()->GetMessageHandler (); 00022 messageHandler->StartTimer (neighbor->GetPollTimer (), neighbor->GetInterface ()->GetPollInterval ()); 00023 } 00024 ChangeState (neighbor, new OSPF::NeighborStateDown, this); 00025 } 00026 if (event == OSPF::Neighbor::OneWayReceived) { 00027 neighbor->Reset (); 00028 ChangeState (neighbor, new OSPF::NeighborStateInit, this); 00029 } 00030 if (event == OSPF::Neighbor::HelloReceived) { 00031 MessageHandler* messageHandler = neighbor->GetInterface ()->GetArea ()->GetRouter ()->GetMessageHandler (); 00032 messageHandler->ClearTimer (neighbor->GetInactivityTimer ()); 00033 messageHandler->StartTimer (neighbor->GetInactivityTimer (), neighbor->GetRouterDeadInterval ()); 00034 } 00035 if (event == OSPF::Neighbor::IsAdjacencyOK) { 00036 if (neighbor->NeedAdjacency ()) { 00037 MessageHandler* messageHandler = neighbor->GetInterface ()->GetArea ()->GetRouter ()->GetMessageHandler (); 00038 if (!(neighbor->IsFirstAdjacencyInited ())) { 00039 neighbor->InitFirstAdjacency (); 00040 } else { 00041 neighbor->IncrementDDSequenceNumber (); 00042 } 00043 neighbor->SendDatabaseDescriptionPacket (true); 00044 messageHandler->StartTimer (neighbor->GetDDRetransmissionTimer (), neighbor->GetInterface ()->GetRetransmissionInterval ()); 00045 ChangeState (neighbor, new OSPF::NeighborStateExchangeStart, this); 00046 } 00047 } 00048 }