private void IncomingConnectionAccepted(bool succeeded, int count, object state)
{
PeerId id = (PeerId)state;
try
{
if (!succeeded) {
var args = new PeerConnectionFailedEventArgs(id.TorrentManager, id.Peer, Direction.Incoming, "Incoming connection coult not be accepted");
id.TorrentManager.RaiseConnectionAttemptFailed (args);
}
bool maxAlreadyOpen = OpenConnections >= Math.Min(this.MaxOpenConnections, id.TorrentManager.Settings.MaxConnections);
if (!succeeded || id.Peer.PeerId == engine.PeerId || maxAlreadyOpen)
{
CleanupSocket (id, "Connection was not accepted");
return;
}
if (id.TorrentManager.Peers.ActivePeers.Contains(id.Peer))
{
Logger.Log(id.Connection, "ConnectionManager - Already connected to peer");
id.Connection.Dispose();
return;
}
Logger.Log(id.Connection, "ConnectionManager - Incoming connection fully accepted");
id.TorrentManager.Peers.AvailablePeers.Remove(id.Peer);
id.TorrentManager.Peers.ActivePeers.Add(id.Peer);
id.TorrentManager.Peers.ConnectedPeers.Add(id);
id.WhenConnected = DateTime.Now;
// Baseline the time the last block was received
id.LastBlockReceived = DateTime.Now;
id.TorrentManager.HandlePeerConnected(id, Direction.Incoming);
// We've sent our handshake so begin our looping to receive incoming message
PeerIO.EnqueueReceiveMessage (id.Connection, id.Decryptor, id.TorrentManager.DownloadLimiter, id.Monitor, id.TorrentManager, messageReceivedCallback, id);
}
catch (Exception e)
{
CleanupSocket (id, e.Message);
}
}