MINOR: spoe: Add a generic function to encode a list of SPOE message

So it will be possible to encode messages chained by event or by group. For now,
it is only possible to do it by event.
diff --git a/src/flt_spoe.c b/src/flt_spoe.c
index d5539c9..67fe403 100644
--- a/src/flt_spoe.c
+++ b/src/flt_spoe.c
@@ -2412,8 +2412,7 @@
 /* Process SPOE actions for a specific event. It returns 1 on success. If an
  * error occurred, 0 is returned. */
 static int
-spoe_process_actions(struct stream *s, struct spoe_context *ctx,
-		     enum spoe_event ev, int dir)
+spoe_process_actions(struct stream *s, struct spoe_context *ctx, int dir)
 {
 	char *p, *end;
 	int   ret;
@@ -2452,7 +2451,7 @@
  * Functions that process SPOE events
  **************************************************************************/
 static inline int
-spoe_start_event_processing(struct spoe_context *ctx, int dir)
+spoe_start_processing(struct spoe_context *ctx, int dir)
 {
 	/* If a process is already started for this SPOE context, retry
 	 * later. */
@@ -2468,7 +2467,7 @@
 }
 
 static inline void
-spoe_stop_event_processing(struct spoe_context *ctx)
+spoe_stop_processing(struct spoe_context *ctx)
 {
 	struct spoe_appctx *sa = ctx->frag_ctx.spoe_appctx;
 
@@ -2499,38 +2498,27 @@
 	}
 }
 
-/* Process a SPOE event. First, this functions will process messages attached to
- * this event and send them to an agent in a NOTIFY frame. Then, it will wait a
- * ACK frame to process corresponding actions. During all the processing, it
- * returns 0 and it returns 1 when the processing is finished. If an error
- * occurred, -1 is returned. */
+/* Process a list of SPOE messages. First, this functions will process messages
+ *  and send them to an agent in a NOTIFY frame. Then, it will wait a ACK frame
+ *  to process corresponding actions. During all the processing, it returns 0
+ *  and it returns 1 when the processing is finished. If an error occurred, -1
+ *  is returned. */
 static int
-spoe_process_event(struct stream *s, struct spoe_context *ctx,
-		   enum spoe_event ev)
+spoe_process_messages(struct stream *s, struct spoe_context *ctx,
+		      struct list *messages, int dir, int type)
 {
 	struct spoe_config *conf = FLT_CONF(ctx->filter);
 	struct spoe_agent  *agent = conf->agent;
-	int                 dir, ret = 1;
-
-	SPOE_PRINTF(stderr, "%d.%06d [SPOE/%-15s] %s: stream=%p"
-		    " - ctx-state=%s - event=%s\n",
-		    (int)now.tv_sec, (int)now.tv_usec,
-		    agent->id, __FUNCTION__, s, spoe_ctx_state_str[ctx->state],
-		    spoe_event_str[ev]);
-
-	dir = ((ev < SPOE_EV_ON_SERVER_SESS) ? SMP_OPT_DIR_REQ : SMP_OPT_DIR_RES);
-
-	if (LIST_ISEMPTY(&(ctx->events[ev])))
-		goto out;
+	int                 ret = 1;
 
 	if (ctx->state == SPOE_CTX_ST_ERROR)
 		goto error;
 
 	if (tick_is_expired(ctx->process_exp, now_ms) && ctx->state != SPOE_CTX_ST_DONE) {
 		SPOE_PRINTF(stderr, "%d.%06d [SPOE/%-15s] %s: stream=%p"
-			    " - failed to process event '%s': timeout\n",
+			    " - failed to process messages: timeout\n",
 			    (int)now.tv_sec, (int)now.tv_usec,
-			    agent->id, __FUNCTION__, s, spoe_event_str[ev]);
+			    agent->id, __FUNCTION__, s);
 		ctx->status_code = SPOE_CTX_ERR_TOUT;
 		goto error;
 	}
@@ -2539,9 +2527,9 @@
 		if (agent->eps_max > 0) {
 			if (!freq_ctr_remain(&agent->err_per_sec, agent->eps_max, 0)) {
 				SPOE_PRINTF(stderr, "%d.%06d [SPOE/%-15s] %s: stream=%p"
-					    " - skip event '%s': max EPS reached\n",
+					    " - skip processing of messages: max EPS reached\n",
 					    (int)now.tv_sec, (int)now.tv_usec,
-					    agent->id, __FUNCTION__, s, spoe_event_str[ev]);
+					    agent->id, __FUNCTION__, s);
 				goto skip;
 			}
 		}
@@ -2551,7 +2539,7 @@
 			s->task->expire  = tick_first((tick_is_expired(s->task->expire, now_ms) ? 0 : s->task->expire),
 						      ctx->process_exp);
 		}
-		ret = spoe_start_event_processing(ctx, dir);
+		ret = spoe_start_processing(ctx, dir);
 		if (!ret)
 			goto out;
 
@@ -2565,7 +2553,7 @@
 	if (ctx->state == SPOE_CTX_ST_ENCODING_MSGS) {
 		if (!spoe_acquire_buffer(&ctx->buffer, &ctx->buffer_wait))
 			goto out;
-		ret = spoe_encode_messages(s, ctx, &(ctx->events[ev]), dir, SPOE_MSGS_BY_EVENT);
+		ret = spoe_encode_messages(s, ctx, messages, dir, type);
 		if (ret < 0)
 			goto error;
 		if (!ret)
@@ -2586,7 +2574,7 @@
 	}
 
 	if (ctx->state == SPOE_CTX_ST_DONE) {
-		spoe_process_actions(s, ctx, ev, dir);
+		spoe_process_actions(s, ctx, dir);
 		ret = 1;
 		ctx->frame_id++;
 		ctx->state = SPOE_CTX_ST_READY;
@@ -2612,13 +2600,12 @@
 			     strlen(agent->var_on_error), &smp);
 	}
 	SPOE_PRINTF(stderr, "%d.%06d [SPOE/%-15s] %s: stream=%p"
-		    " - failed to create process event '%s': code=%u\n",
+		    " - failed to process messages: code=%u\n",
 		    (int)now.tv_sec, (int)now.tv_usec, agent->id,
-		    __FUNCTION__, ctx->strm, spoe_event_str[ev],
-		    ctx->status_code);
+		    __FUNCTION__, ctx->strm, ctx->status_code);
 	send_log(ctx->strm->be, LOG_WARNING,
-		 "SPOE: [%s] failed to process event '%s': code=%u\n",
-		 agent->id, spoe_event_str[ev], ctx->status_code);
+		 "SPOE: [%s] failed to process messages: code=%u\n",
+		 agent->id, ctx->status_code);
 
 	ctx->state = ((agent->flags & SPOE_FL_CONT_ON_ERR)
 		      ? SPOE_CTX_ST_READY
@@ -2631,7 +2618,31 @@
 	ret = 1;
 
   end:
-	spoe_stop_event_processing(ctx);
+	spoe_stop_processing(ctx);
+	return ret;
+}
+
+/* Process a SPOE event, ie the list of messages attached to the event <ev>.
+ * See spoe_process_message for details. */
+static int
+spoe_process_event(struct stream *s, struct spoe_context *ctx,
+		   enum spoe_event ev)
+{
+	int dir, ret;
+
+	SPOE_PRINTF(stderr, "%d.%06d [SPOE/%-15s] %s: stream=%p"
+		    " - ctx-state=%s - event=%s\n",
+		    (int)now.tv_sec, (int)now.tv_usec,
+		    ((struct spoe_config *)FLT_CONF(ctx->filter))->agent->id,
+		    __FUNCTION__, s, spoe_ctx_state_str[ctx->state],
+		    spoe_event_str[ev]);
+
+	dir = ((ev < SPOE_EV_ON_SERVER_SESS) ? SMP_OPT_DIR_REQ : SMP_OPT_DIR_RES);
+
+	if (LIST_ISEMPTY(&(ctx->events[ev])))
+		return 1;
+
+	ret = spoe_process_messages(s, ctx, &(ctx->events[ev]), dir, SPOE_MSGS_BY_EVENT);
 	return ret;
 }
 
@@ -2715,7 +2726,7 @@
 	if (!ctx)
 		return;
 
-	spoe_stop_event_processing(ctx);
+	spoe_stop_processing(ctx);
 	pool_free2(pool2_spoe_ctx, ctx);
 }