// ---------------------------
  // helpers
  private void sendSingleEvent(
      HttpServletResponse res, XmlEvent event, final ServletOutputStream ostrm) throws Exception {

    // need to filter out
    int evnetType = event.getEventType();
    if (evnetType == XmlEvent.ET_CommonLog) {
      CommonLogParameters clp =
          (CommonLogParameters) eventFilterParameters_m.get(XmlEvent.ET_CommonLog);

      CommonLog clog = event.getAsLog();

      // filter

      if (clp.end_date_hist > 0 && clog.getLogDate() > clp.end_date_hist) {
        return;
      }

      if (clp.begin_date_hist > 0 && clog.getLogDate() < clp.begin_date_hist) {
        return;
      }

      if (clog.getLogLevel() > clp.level) {
        return;
      }

      if (clp.threadFilter != null && clp.threadFilter.length() > 0) {
        Matcher mtch = clp.p_threadFilter.matcher(String.valueOf(clog.getLogThread()));
        if (!mtch.find()) {
          return;
        }
      }

      //
      if (clp.contextFilter != null && clp.contextFilter.length() > 0) {
        Matcher mtch = clp.p_contextFilter.matcher(String.valueOf(clog.getContext()));
        if (!mtch.find()) {
          return;
        }
      }

      if (clp.contentSmallFilter != null && clp.contentSmallFilter.length() > 0) {
        Matcher mtch = clp.p_contentSmallFilter.matcher(String.valueOf(clog.getContent()));
        if (!mtch.find()) {
          return;
        }
      }

      if (debugstream_m != null) {
        writeDebugEntry("Sending log event: " + clog.toSmallDebugString());
      }

    } else if (evnetType == XmlEvent.ET_DrawableObject) {
      DrawableObjectParameters clp =
          (DrawableObjectParameters) eventFilterParameters_m.get(XmlEvent.ET_DrawableObject);

      HtDrawableObject dobj = event.getAsDrawableObject();

      if (clp.end_date_hist > 0 && dobj.getTime() > clp.end_date_hist) {
        return;
      }

      if (clp.begin_date_hist > 0 && dobj.getTime() < clp.begin_date_hist) {
        return;
      }

      // filter out by type
      if (clp.allowed_type.size() > 0 && !clp.allowed_type.contains(dobj.getType())) {
        return;
      }

      if (clp.allowed_symbols_m != null) {
        if (!clp.allowed_symbols_m.contains(dobj.getSymbol())) {
          return;
        }
      }

      if (dobj.getType() == HtDrawableObject.DO_TEXT) {

        if (clp.shortTextFilter != null && clp.shortTextFilter.length() > 0) {
          Matcher mtch = clp.p_shortTextFilter.matcher(dobj.getAsText().shortText_m.toString());
          if (!mtch.find()) {
            return;
          }
        }

        if (clp.textFilter != null && clp.textFilter.length() > 0) {
          Matcher mtch = clp.p_textFilter.matcher(dobj.getAsText().text_m.toString());
          if (!mtch.find()) {
            return;
          }
        }
      }

    } else if (evnetType == XmlEvent.ET_RtProviderTicker) {
      RtDataParameters clp =
          (RtDataParameters) eventFilterParameters_m.get(XmlEvent.ET_RtProviderTicker);

      if (clp.allowed_symbols_m != null) {
        if (!clp.allowed_symbols_m.contains(event.getAsRtData().getSymbol())) {
          return;
        }
      }
    }

    HtXmlEventExchangePacket.Packet packet = new HtXmlEventExchangePacket.Packet();
    HtXmlEventExchangePacket.serializeSingleEvent(handler_m, event, packet);

    HtXmlEventExchangePacket.writePacketToStream(packet, ostrm, ll_m);
  }