MINOR: httpclient/lua: support more HTTP methods

Add support for HEAD/PUT/POST/DELETE method with the lua httpclient.

This patch use the httpclient_req_gen() function with a different meth
parameter to implement this.

Also change the reg-test to support a POST request with a body.
diff --git a/src/hlua.c b/src/hlua.c
index a7ed113..d3c7684 100644
--- a/src/hlua.c
+++ b/src/hlua.c
@@ -7038,7 +7038,7 @@
  * in the lua buffer, once the httpclient finished its job, push the result on
  * the stack
  */
-__LJMP static int hlua_httpclient_get_yield(lua_State *L, int status, lua_KContext ctx)
+__LJMP static int hlua_httpclient_send_yield(lua_State *L, int status, lua_KContext ctx)
 {
 	struct buffer *tr;
 	int res;
@@ -7076,7 +7076,7 @@
 		task_wakeup(hlua->task, TASK_WOKEN_MSG);
 
 
-	MAY_LJMP(hlua_yieldk(L, 0, 0, hlua_httpclient_get_yield, TICK_ETERNITY, 0));
+	MAY_LJMP(hlua_yieldk(L, 0, 0, hlua_httpclient_send_yield, TICK_ETERNITY, 0));
 	return 0;
 }
 
@@ -7152,12 +7152,10 @@
 
 
 /*
- * Sends and receive an HTTP request
- *
- * httpclient.get(url, headers)
+ * Send an HTTP request and wait for a response
  */
 
-__LJMP static int hlua_httpclient_get(lua_State *L)
+__LJMP static int hlua_httpclient_send(lua_State *L, enum http_meth_t meth)
 {
 	struct hlua_httpclient *hlua_hc;
 	struct http_hdr *hdrs = NULL;
@@ -7202,7 +7200,7 @@
 	hlua_hc = hlua_checkhttpclient(L, 1);
 
 	hlua_hc->hc->req.url = istdup(ist(url_str));
-	hlua_hc->hc->req.meth = HTTP_METH_GET;
+	hlua_hc->hc->req.meth = meth;
 
 	/* update the httpclient callbacks */
 	hlua_hc->hc->ops.res_stline = hlua_httpclient_res_cb;
@@ -7211,7 +7209,7 @@
 	hlua_hc->hc->ops.res_end = hlua_httpclient_res_cb;
 
 
-	httpclient_req_gen(hlua_hc->hc, hlua_hc->hc->req.url, HTTP_METH_GET, hdrs, ist(body_str));
+	httpclient_req_gen(hlua_hc->hc, hlua_hc->hc->req.url, meth, hdrs, ist(body_str));
 	httpclient_start(hlua_hc->hc);
 
 	/* free the temporary headers array */
@@ -7231,11 +7229,63 @@
 	luaL_buffinit(L, &hlua_hc->b);
 	lua_pushstring(L, "body");
 
-	MAY_LJMP(hlua_yieldk(L, 0, 0, hlua_httpclient_get_yield, TICK_ETERNITY, 0));
+	MAY_LJMP(hlua_yieldk(L, 0, 0, hlua_httpclient_send_yield, TICK_ETERNITY, 0));
 	return 0;
 }
 
 /*
+ * Sends an HTTP HEAD request and wait for a response
+ *
+ * httpclient:head(url, headers, payload)
+ */
+__LJMP static int hlua_httpclient_head(lua_State *L)
+{
+	return hlua_httpclient_send(L, HTTP_METH_HEAD);
+}
+
+/*
+ * Send an HTTP GET request and wait for a response
+ *
+ * httpclient:get(url, headers, payload)
+ */
+__LJMP static int hlua_httpclient_get(lua_State *L)
+{
+	return hlua_httpclient_send(L, HTTP_METH_GET);
+
+}
+
+/*
+ * Sends an HTTP PUT request and wait for a response
+ *
+ * httpclient:put(url, headers, payload)
+ */
+__LJMP static int hlua_httpclient_put(lua_State *L)
+{
+	return hlua_httpclient_send(L, HTTP_METH_PUT);
+}
+
+/*
+ * Send an HTTP POST request and wait for a response
+ *
+ * httpclient:post(url, headers, payload)
+ */
+__LJMP static int hlua_httpclient_post(lua_State *L)
+{
+	return hlua_httpclient_send(L, HTTP_METH_POST);
+}
+
+
+/*
+ * Sends an HTTP DELETE request and wait for a response
+ *
+ * httpclient:delete(url, headers, payload)
+ */
+__LJMP static int hlua_httpclient_delete(lua_State *L)
+{
+	return hlua_httpclient_send(L, HTTP_METH_DELETE);
+}
+
+/*
  *
  *
  * Class TXN
@@ -11918,6 +11968,10 @@
 	lua_pushstring(L, "__index");
 	lua_newtable(L);
 	hlua_class_function(L, "get",         hlua_httpclient_get);
+	hlua_class_function(L, "head",        hlua_httpclient_head);
+	hlua_class_function(L, "put",         hlua_httpclient_put);
+	hlua_class_function(L, "post",        hlua_httpclient_post);
+	hlua_class_function(L, "delete",      hlua_httpclient_delete);
 	lua_settable(L, -3); /* Sets the __index entry. */
 	/* Register the garbage collector entry. */
 	lua_pushstring(L, "__gc");