public long readFromConnection(ManagedConnection mc,BitMap b){
		List<Response> rlist = mc.getPeerResponseBlocks();
		long bytes = 0;
		if(rlist!=null){
			for(Response r : rlist){
				bytes+=r.block.length;
				if(disseminatedPiecesToCompete.containsKey(r.index)){
//					System.out.println("working towards complete!");
					if(disseminatedPiecesToCompete.get(r.index).addData(r.begin, r.block)){
						//complete
						System.out.println("Complete! "+r.index);
						Piece p = disseminatedPiecesToCompete.remove(r.index);
						recentlyCompleted.add(p);
						dequeuePiece(p);
					}
				}else{
					//TODO: check if we need piece?
					if(!otherPiecesGettingComplete.containsKey(r.index)){
						otherPiecesGettingComplete.put(r.index, b.createPiece(r.index));
					}
					
					if(otherPiecesGettingComplete.get(r.index).addData(r.begin, r.block)){
						System.out.println("Complete! -Unown- "+r.index);
						recentlyCompleted.add(otherPiecesGettingComplete.remove(r.index));
					}
				}
			}
		}
		return bytes;
	}