MINOR: stream/applet: add use-service action

This new target can be called from the frontend or the backend. It
is evaluated just before the backend choice and just before the server
choice. So, the input stream or HTTP request can be forwarded to a
server or to an internal service.
diff --git a/include/proto/stream.h b/include/proto/stream.h
index 1fea1ab..1360f28 100644
--- a/include/proto/stream.h
+++ b/include/proto/stream.h
@@ -307,6 +307,8 @@
 		__stream_offer_buffers(avail);
 }
 
+void service_keywords_register(struct action_kw_list *kw_list);
+
 #endif /* _PROTO_STREAM_H */
 
 /*
diff --git a/include/types/action.h b/include/types/action.h
index ca0163f..b97f9bf 100644
--- a/include/types/action.h
+++ b/include/types/action.h
@@ -24,6 +24,7 @@
 
 #include <common/regex.h>
 
+#include <types/applet.h>
 #include <types/stick_table.h>
 
 enum act_from {
@@ -101,6 +102,7 @@
 	enum act_return (*action_ptr)(struct act_rule *rule, struct proxy *px,  /* ptr to custom action */
 	                              struct session *sess, struct stream *s, int flags);
 	struct action_kw *kw;
+	struct applet applet;                  /* used for the applet registration. */
 	union {
 		struct {
 			char *realm;
diff --git a/include/types/applet.h b/include/types/applet.h
index 799df91..21978bf 100644
--- a/include/types/applet.h
+++ b/include/types/applet.h
@@ -53,6 +53,7 @@
 	unsigned int st2;          /* output state for stats, unused by peers  */
 	struct applet *applet;     /* applet this context refers to */
 	void *owner;               /* pointer to upper layer's entity (eg: stream interface) */
+	struct act_rule *rule;     /* rule associated with the applet. */
 
 	union {
 		struct {