Пример #1
0
        // Process Refuse message from the neighbor
        public void Refuse(IPeerNeighbor neighbor, RefuseInfo refuseInfo)
        {
            // Don't bother processing the message if Connector has closed
            if (this.state != State.Opened)
            {
                return;
            }

            PeerCloseReason  closeReason = PeerCloseReason.InvalidNeighbor;
            IList <Referral> referrals   = null;

            if (refuseInfo.HasBody())
            {
                // Refuse message should only be received when neighbor is the initiator
                // and is in connecting state --we accept in closed state to account for
                // timeouts.
                if (neighbor.IsInitiator && (neighbor.State == PeerNeighborState.Connecting ||
                                             neighbor.State == PeerNeighborState.Closed))
                {
                    // Remove the entry from timer table for this neighbor
                    RemoveTimer(neighbor);

                    if (PeerConnectorHelper.IsDefined(refuseInfo.Reason))
                    {
                        closeReason = (PeerCloseReason)refuseInfo.Reason;
                        referrals   = refuseInfo.Referrals;
                    }
                }
            }
            // Complete processing of refuse message
            CompleteTerminateMessageProcessing(neighbor, closeReason, referrals);
        }
Пример #2
0
        // Process Disconnect message from the neighbor
        public void Disconnect(IPeerNeighbor neighbor, DisconnectInfo disconnectInfo)
        {
            // Don't bother processing the message if Connector has closed
            if (this.state != State.Opened)
            {
                return;
            }

            PeerCloseReason  closeReason = PeerCloseReason.InvalidNeighbor;
            IList <Referral> referrals   = null;

            if (disconnectInfo.HasBody())
            {
                // We should only receive Disconnect message after the neighbor has transitioned
                // to connected state.
                if (neighbor.State >= PeerNeighborState.Connected)
                {
                    if (PeerConnectorHelper.IsDefined(disconnectInfo.Reason))
                    {
                        closeReason = (PeerCloseReason)disconnectInfo.Reason;
                        referrals   = disconnectInfo.Referrals;
                    }
                }
            }

            // Complete processing of disconnect message
            CompleteTerminateMessageProcessing(neighbor, closeReason, referrals);
        }
 public void Refuse(IPeerNeighbor neighbor, RefuseInfo refuseInfo)
 {
     if (this.state == State.Opened)
     {
         PeerCloseReason  invalidNeighbor = PeerCloseReason.InvalidNeighbor;
         IList <Referral> referrals       = null;
         if ((refuseInfo.HasBody() && neighbor.IsInitiator) && ((neighbor.State == PeerNeighborState.Connecting) || (neighbor.State == PeerNeighborState.Closed)))
         {
             this.RemoveTimer(neighbor);
             if (PeerConnectorHelper.IsDefined(refuseInfo.Reason))
             {
                 invalidNeighbor = (PeerCloseReason)refuseInfo.Reason;
                 referrals       = refuseInfo.Referrals;
             }
         }
         this.CompleteTerminateMessageProcessing(neighbor, invalidNeighbor, referrals);
     }
 }
 public void Disconnect(IPeerNeighbor neighbor, DisconnectInfo disconnectInfo)
 {
     if (this.state == State.Opened)
     {
         PeerCloseReason  invalidNeighbor = PeerCloseReason.InvalidNeighbor;
         IList <Referral> referrals       = null;
         if ((disconnectInfo.HasBody() && (neighbor.State >= PeerNeighborState.Connected)) && PeerConnectorHelper.IsDefined(disconnectInfo.Reason))
         {
             invalidNeighbor = (PeerCloseReason)disconnectInfo.Reason;
             referrals       = disconnectInfo.Referrals;
         }
         this.CompleteTerminateMessageProcessing(neighbor, invalidNeighbor, referrals);
     }
 }