/* ------------------------------------------------------------ */
  @Override
  public void onFillable() {
    if (DEBUG) LOG.debug("onFillable enter {}", getEndPoint());

    // wake up whoever is doing the fill or the flush so they can
    // do all the filling, unwrapping, wrapping and flushing
    _filterEndPoint.getFillInterest().fillable();

    if (DEBUG) LOG.debug("onFillable exit {}", getEndPoint());
  }
 /* ------------------------------------------------------------ */
 @Override
 public String toString() {
   return String.format(
       "%s@%x -> %s",
       FilterConnection.class.getSimpleName(), hashCode(), _filterEndPoint.getConnection());
 }
 /* ------------------------------------------------------------ */
 @Override
 public void onFillInterestedFailed(Throwable cause) {
   _filterEndPoint.getFillInterest().onFail(cause);
 }
 @Override
 public int getMessagesOut() {
   return _filterEndPoint.getConnection().getMessagesOut();
 }
 @Override
 public void onClose() {
   for (Filter filter : _filters) filter.closed(getEndPoint());
   _filterEndPoint.getConnection().onClose();
   super.onClose();
 }