summaryrefslogtreecommitdiff
path: root/src/PeerInteractionCommand.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/PeerInteractionCommand.cc')
-rw-r--r--src/PeerInteractionCommand.cc17
1 files changed, 11 insertions, 6 deletions
diff --git a/src/PeerInteractionCommand.cc b/src/PeerInteractionCommand.cc
index 1b5f60d9..5b0174ee 100644
--- a/src/PeerInteractionCommand.cc
+++ b/src/PeerInteractionCommand.cc
@@ -46,6 +46,7 @@ PeerInteractionCommand::PeerInteractionCommand(int cuid, Peer* peer,
PeerInteractionCommand::~PeerInteractionCommand() {
delete peerConnection;
delete requestSlotMan;
+ e->torrentMan->unadvertisePiece(cuid);
}
bool PeerInteractionCommand::executeInternal() {
@@ -378,14 +379,18 @@ void PeerInteractionCommand::beforeSocketCheck() {
PendingMessage pendingMessage(PeerMessage::BITFIELD, peerConnection);
pendingMessages.push_back(pendingMessage);
} else {
- for(vector<int>::iterator itr = indexes.begin(); itr != indexes.end(); itr++) {
- PendingMessage pendingMessage = PendingMessage::createHaveMessage(*itr, peerConnection);
- pendingMessages.push_back(pendingMessage);
+ if(pendingMessages.size() == 0) {
+ for(vector<int>::iterator itr = indexes.begin(); itr != indexes.end(); itr++) {
+ peerConnection->sendHave(*itr);
+ }
+ } else {
+ for(vector<int>::iterator itr = indexes.begin(); itr != indexes.end(); itr++) {
+ PendingMessage pendingMessage = PendingMessage::createHaveMessage(*itr, peerConnection);
+ pendingMessages.push_back(pendingMessage);
+ }
}
}
- if(indexes.size() == 0) {
- keepAlive();
- }
+ keepAlive();
}
}