Exemple #1
0
 /// <summary>
 /// Raises the <see cref="E:CircuitChanged" /> event.
 /// </summary>
 /// <param name="e">The <see cref="CircuitEventArgs"/> instance containing the event data.</param>
 internal void OnCircuitChanged(CircuitEventArgs e)
 {
     if (circuitChangedHandlers != null)
     {
         circuitChangedHandlers(client, e);
     }
 }
Exemple #2
0
        /// <summary>
        /// Called when a circuit changes within the tor service.
        /// </summary>
        /// <param name="sender">The sender.</param>
        /// <param name="e">The <see cref="CircuitEventArgs"/> instance containing the event data.</param>
        private void OnCircuitChanged(object sender, CircuitEventArgs e)
        {
            if (e.Circuit == null)
            {
                return;
            }

            lock (synchronizeCircuits)
            {
                Circuit existing = circuits.Where(c => c.ID == e.Circuit.ID).FirstOrDefault();

                if (existing == null)
                {
                    if (Status.MaximumRecords <= circuits.Count)
                    {
                        Circuit removal = circuits.Where(c => c.Status == CircuitStatus.Closed || c.Status == CircuitStatus.Failed).FirstOrDefault();

                        if (removal == null)
                        {
                            return;
                        }

                        circuits.Remove(removal);
                    }

                    existing = e.Circuit;
                    existing.GetRouters();
                    circuits.Add(existing);
                }
                else
                {
                    bool update = existing.Paths.Count != e.Circuit.Paths.Count || e.Circuit.Status == CircuitStatus.Extended;

                    existing.BuildFlags  = e.Circuit.BuildFlags;
                    existing.HSState     = e.Circuit.HSState;
                    existing.Paths       = e.Circuit.Paths;
                    existing.Purpose     = e.Circuit.Purpose;
                    existing.Reason      = e.Circuit.Reason;
                    existing.Status      = e.Circuit.Status;
                    existing.TimeCreated = e.Circuit.TimeCreated;

                    if (update)
                    {
                        existing.GetRouters();
                    }
                }
            }

            if (CircuitsChanged != null)
            {
                CircuitsChanged(client, EventArgs.Empty);
            }
        }