REORG: cli: move get/set weight to server.c

Move get/set weight CLI functions to server.c and use the cli keyword API
to register it on the CLI.
diff --git a/src/cli.c b/src/cli.c
index efceb72..3662c50 100644
--- a/src/cli.c
+++ b/src/cli.c
@@ -153,8 +153,6 @@
 	"  show stat      : report counters for each proxy and server\n"
 	"  show errors    : report last request and response errors for each proxy\n"
 	"  show table [id]: report table usage stats or dump this table's contents\n"
-	"  get weight     : report a server's current weight\n"
-	"  set weight     : change a server's weight\n"
 	"  set table [id] : update or create a table entry's data\n"
 	"  set timeout    : change a timeout setting\n"
 	"  set maxconn    : change a maxconn setting\n"
@@ -1190,58 +1188,8 @@
 			return 0;
 		}
 	}
-	else if (strcmp(args[0], "get") == 0) {
-		if (strcmp(args[1], "weight") == 0) {
-			struct proxy *px;
-			struct server *sv;
-
-			/* split "backend/server" and make <line> point to server */
-			for (line = args[2]; *line; line++)
-				if (*line == '/') {
-					*line++ = '\0';
-					break;
-				}
-
-			if (!*line) {
-				appctx->ctx.cli.msg = "Require 'backend/server'.\n";
-				appctx->st0 = STAT_CLI_PRINT;
-				return 1;
-			}
-
-			if (!get_backend_server(args[2], line, &px, &sv)) {
-				appctx->ctx.cli.msg = px ? "No such server.\n" : "No such backend.\n";
-				appctx->st0 = STAT_CLI_PRINT;
-				return 1;
-			}
-
-			/* return server's effective weight at the moment */
-			snprintf(trash.str, trash.size, "%d (initial %d)\n", sv->uweight, sv->iweight);
-			if (bi_putstr(si_ic(si), trash.str) == -1)
-				si_applet_cant_put(si);
-
-			return 1;
-		}
-		else { /* not "get weight" */
-			return 0;
-		}
-	}
 	else if (strcmp(args[0], "set") == 0) {
-		if (strcmp(args[1], "weight") == 0) {
-			struct server *sv;
-			const char *warning;
-
-			sv = expect_server_admin(s, si, args[2]);
-			if (!sv)
-				return 1;
-
-			warning = server_parse_weight_change_request(sv, args[3]);
-			if (warning) {
-				appctx->ctx.cli.msg = warning;
-				appctx->st0 = STAT_CLI_PRINT;
-			}
-			return 1;
-		}
-		else if (strcmp(args[1], "timeout") == 0) {
+		if (strcmp(args[1], "timeout") == 0) {
 			if (strcmp(args[2], "cli") == 0) {
 				unsigned timeout;
 				const char *res;
diff --git a/src/server.c b/src/server.c
index b07a2fe..fb891f8 100644
--- a/src/server.c
+++ b/src/server.c
@@ -3507,9 +3507,68 @@
 	return 1;
 }
 
+static int cli_parse_get_weight(char **args, struct appctx *appctx, void *private)
+{
+	struct stream_interface *si = appctx->owner;
+	struct proxy *px;
+	struct server *sv;
+	char *line;
+
+
+	/* split "backend/server" and make <line> point to server */
+	for (line = args[2]; *line; line++)
+		if (*line == '/') {
+			*line++ = '\0';
+			break;
+		}
+
+	if (!*line) {
+		appctx->ctx.cli.msg = "Require 'backend/server'.\n";
+		appctx->st0 = STAT_CLI_PRINT;
+		return 1;
+	}
+
+	if (!get_backend_server(args[2], line, &px, &sv)) {
+		appctx->ctx.cli.msg = px ? "No such server.\n" : "No such backend.\n";
+		appctx->st0 = STAT_CLI_PRINT;
+		return 1;
+	}
+
+	/* return server's effective weight at the moment */
+	snprintf(trash.str, trash.size, "%d (initial %d)\n", sv->uweight, sv->iweight);
+	if (bi_putstr(si_ic(si), trash.str) == -1)
+		si_applet_cant_put(si);
+
+	return 1;
+}
+
+static int cli_parse_set_weight(char **args, struct appctx *appctx, void *private)
+{
+	struct server *sv;
+	const char *warning;
+
+	if (!cli_has_level(appctx, ACCESS_LVL_ADMIN))
+		return 1;
+
+	sv = cli_find_server(appctx, args[2]);
+	if (!sv)
+		return 1;
+
+	warning = server_parse_weight_change_request(sv, args[3]);
+	if (warning) {
+		appctx->ctx.cli.msg = warning;
+		appctx->st0 = STAT_CLI_PRINT;
+	}
+	return 1;
+}
+
+
 /* register cli keywords */
 static struct cli_kw_list cli_kws = {{ },{
 	{ { "set", "server", NULL }, "set server     : change a server's state, weight or address",  cli_parse_set_server },
+	{ { "get", "weight", NULL }, "get weight     : report a server's current weight",  cli_parse_get_weight },
+	{ { "set", "weight", NULL }, "set weight     : change a server's weight (deprecated)",  cli_parse_set_weight },
+
 	{{},}
 }};