public void feedPlainPacket(ByteBuffer b, Object passThrough) {	
		if(!isConnected)
			throw new NotYetConnectedException();
		else if(isClosing || isClosed) {
			throw new IllegalStateException(id+"SSLEngine is in the process of closing or is closed");
		} else if(runningRunnable)
			throw new IllegalStateException(id+"SSLListener was passed a Runnable object that" +
					" has not completed yet and must complete before encryption can continue");
		
		if(log.isLoggable(Level.FINE))
			log.fine(id+"feedPlainPacket [in-buffer] pos="+b.position()+" lim="+b.limit());
		
		HELPER.eraseBuffer(engineToSocketData);

		SSLEngineResult result;
		try {
			result = sslEngine.wrap(b, engineToSocketData);
		} catch (SSLException e) {
			throw new AsyncSSLEngineException(e);
		}
		
		Status status = result.getStatus();
		HandshakeStatus hsStatus = result.getHandshakeStatus();
		if(status != Status.OK)
			throw new RuntimeException("Bug, status="+status+" instead of OK.  hsStatus="+
					hsStatus+" Something went wrong and we could not encrypt the data");
		else if(b.hasRemaining())
			throw new RuntimeException(id+"Bug, should read all my data every time");
		
		HELPER.doneFillingBuffer(engineToSocketData);
		if(log.isLoggable(Level.FINE))
			log.fine(id+"SSLListener.packetEncrypted pos="+engineToSocketData.position()+
					" lim="+engineToSocketData.limit()+" hsStatus="+hsStatus+" status="+status);
		fireEncryptedPacketToListener(passThrough);
	}