public boolean notifyImpl(ByteBuffer b, Object passthrough) throws IOException {
		if (log.isLoggable(Level.FINEST))
			log.log(Level.FINEST, "processing stream");
		if(b == null)
			throw new IllegalArgumentException("evt cannot be null");

		boolean notified = false;
		
		while(b.remaining() > 0) {
			switch(state) {
				case PROCESSING_HEADER:
					processHeader(b);		
				break;
				case PROCESSING_BODY:
					processBody(b);
				break;
				case PROCESSING_TAIL:
					notified = processTail(b, passthrough);
				break;
				case RECOVERING:
					findNewTrailer(b);
				break;
				default:
				break;
			}
		}
		return notified;
	}