static gboolean log_proto_padded_record_server_fetch_from_buffer(LogProtoBufferedServer *s, const guchar *buffer_start, gsize buffer_bytes, const guchar **msg, gsize *msg_len) { LogProtoBufferedServerState *state = log_proto_buffered_server_get_state(s); const guchar *eol; eol = find_eom(buffer_start, buffer_bytes); *msg_len = (eol ? eol - buffer_start : buffer_bytes); state->pending_buffer_pos = state->pending_buffer_end; *msg = buffer_start; log_proto_buffered_server_put_state(s); return TRUE; }
static void testcase(gchar *msg, gsize msg_len, gint eom_ofs) { const gchar *eom; eom = find_eom(msg, msg_len); if (eom_ofs == -1 && eom != NULL) { fprintf(stderr, "EOM returned is not NULL, which was expected. eom_ofs=%d, eom=%s\n", eom_ofs, eom); exit(1); } if (eom_ofs == -1) return; if (eom - msg != eom_ofs) { fprintf(stderr, "EOM is at wrong location. msg=%s, eom_ofs=%d, eom=%s\n", msg, eom_ofs, eom); exit(1); } }
static gboolean log_proto_text_server_try_extract(LogProtoTextServer *self, LogProtoBufferedServerState *state, const guchar *buffer_start, gsize buffer_bytes, const guchar *eol, const guchar **msg, gsize *msg_len) { gint verdict; guint32 next_line_pos; guint32 next_eol_pos = 0; next_line_pos = eol + 1 - self->super.buffer; if (state->pending_buffer_end != next_line_pos) { const guchar *eom; /* we have some more data in the buffer, check if we have a * subsequent EOL there. It indicates whether we need to * read further data, or the buffer already contains a * complete line */ eom = find_eom(self->super.buffer + next_line_pos, state->pending_buffer_end - next_line_pos); if (eom) next_eol_pos = eom - self->super.buffer; } *msg_len = eol - buffer_start; *msg = buffer_start; verdict = log_proto_text_server_accumulate_line(self, *msg, *msg_len, self->consumed_len); if (verdict & LPT_EXTRACTED) { if (verdict & LPT_CONSUME_LINE) { gint drop_length = (verdict & LPT_CONSUME_PARTIAL_AMOUNT_MASK) >> LPT_CONSUME_PARTIAL_AMOUNT_SHIFT; state->pending_buffer_pos = next_line_pos; self->cached_eol_pos = next_eol_pos; if (drop_length) *msg_len -= drop_length; } else if (verdict & LPT_REWIND_LINE)