From a26c92d7dda327f2b1483fe7250cb27580a0a039 Mon Sep 17 00:00:00 2001 From: Perttu Ahola Date: Fri, 24 Dec 2010 17:08:50 +0200 Subject: disconnect method to connection to be used instead of just timing out --- src/connection.cpp | 44 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) (limited to 'src/connection.cpp') diff --git a/src/connection.cpp b/src/connection.cpp index e0a201773..0bc8492e6 100644 --- a/src/connection.cpp +++ b/src/connection.cpp @@ -542,6 +542,23 @@ void Connection::Connect(Address address) //m_waiting_new_peer_id = true; } +void Connection::Disconnect() +{ + // Create and send DISCO packet + SharedBuffer data(2); + writeU8(&data[0], TYPE_CONTROL); + writeU8(&data[1], CONTROLTYPE_DISCO); + + // Send to all + core::map::Iterator j; + j = m_peers.getIterator(); + for(; j.atEnd() == false; j++) + { + Peer *peer = j.getNode()->getValue(); + SendAsPacket(peer->id, 0, data, false); + } +} + bool Connection::Connected() { if(m_peers.size() != 1) @@ -645,7 +662,22 @@ SharedBuffer Channel::ProcessPacket( // the timeout counter con->PrintInfo(); dout_con<<"PING"<PrintInfo(); + dout_con<<"DISCO: Removing peer "<<(peer_id)<deletePeer(peer_id) == false) + { + con->PrintInfo(derr_con); + derr_con<<"DISCO: Peer not found"<PrintInfo(derr_con); @@ -1323,6 +1355,16 @@ core::list Connection::GetPeers() return list; } +bool Connection::deletePeer(u16 peer_id) +{ + if(m_peers.find(peer_id) == NULL) + return false; + m_peerhandler->deletingPeer(m_peers[peer_id], true); + delete m_peers[peer_id]; + m_peers.remove(peer_id); + return true; +} + void Connection::PrintInfo(std::ostream &out) { out<