private synchronized boolean hasReceivedPacketWithSequenceNumber(int sequenceNumber) {
		//if the sequence number isn't specified then we can't tell whether we've received it before--assume we haven't
		if(sequenceNumber == Packet.SEQUENCE_NUMBER_NOT_APPLICABLE)
			return false;

		//if we've NEVER received a packet ever before then there's no way we could have received this one
		if(lastReceivedPacketSequenceNumber == Packet.SEQUENCE_NUMBER_NOT_APPLICABLE)
			return false;

		//if we JUST received the packet then obviously we've received it before
		if(lastReceivedPacketSequenceNumber == sequenceNumber)
			return true;

		//if the packet is from the future (possibly the next packet) then we haven't received it before
		int delta = Packet.deltaBetweenSequenceNumbers(lastReceivedPacketSequenceNumber, sequenceNumber);
		if(delta > 0)
			return false;

		//if the packet is really old then assume we've received it before
		if(delta <= -NUM_RECEIVED_PACKETS_STORED)
			return true;

		//otherwise find the index of the packet in the receivedPackets array and if it's null we haven't received it before
		int index = (lastReceivedPacketIndex + delta);
		if(index < 0)
			index += PacketRecorder.NUM_RECEIVED_PACKETS_STORED;
		return receivedPackets[index] != null;
	}