public PacketAction feedEncryptedPacket(ByteBuffer b, Object passthrough) {
		if(isClosed) {
			throw new IllegalStateException(id+"SSLEngine is closed");
		} else if(runningRunnable)
			throw new IllegalStateException(id+"SSLListener was passed a Runnable object" +
					" that has not completed yet and must complete before decryption can continue");
		try {
			HandshakeStatus hsStatus = sslEngine.getHandshakeStatus();
			if(log.isLoggable(Level.FINE)) {
				log.fine(id+"feedEncryptedPacket [in-buffer] pos="+b.position()+
						" lim="+b.limit()+" hsStatus="+hsStatus+" cap="+b.capacity());
			}
			socketToEngineData2.put(b);
			if(log.isLoggable(Level.FINEST))
				log.finest(id+"[sockToEngine] pos="+socketToEngineData2.position()+" lim="+socketToEngineData2.limit());

			PacketAction result = feedEncryptedPacketImpl(passthrough);
			if(b.hasRemaining())
				throw new RuntimeException(this+"BUG, need to read all data from ByteBuffer.  incoming="+b+" socketToEngineBuf="+socketToEngineData2);
			return result;
		} catch (AsyncSSLEngineException e) {
			//try to close SSLEngine
			throw closeTry(e);
		} catch(NioException e) {
			throw closeTry(e);
		}
	}