changeset 19862:b52e1ad3b4f5

doveadm-cmd: Add CMD_PARAM_IP
author Aki Tuomi <aki.tuomi@dovecot.fi>
date Fri, 26 Feb 2016 09:33:25 +0200
parents 5e24a8a65b3b
children 516e7c50d32f
files src/doveadm/client-connection-http.c src/doveadm/doveadm-cmd.c src/doveadm/doveadm-cmd.h
diffstat 3 files changed, 27 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/doveadm/client-connection-http.c	Thu Feb 25 12:30:45 2016 +0200
+++ b/src/doveadm/client-connection-http.c	Fri Feb 26 09:33:25 2016 +0200
@@ -257,6 +257,11 @@
 						conn->method_err = 400;
 					}
 					break;
+				case CMD_PARAM_IP:
+					if (net_addr2ip(*value, &conn->cmd_param->value.v_ip) != 0) {
+						conn->method_err = 400;
+					}
+					break;
 				case CMD_PARAM_STR:
 					conn->cmd_param->value.v_string = p_strdup(conn->client.pool, *value); break;
 				default:
@@ -538,6 +543,7 @@
 			case CMD_PARAM_ARRAY:
 				o_stream_nsend_str(conn->client.output, "array");
 				break;
+			case CMD_PARAM_IP:
 			case CMD_PARAM_ISTREAM:
 			case CMD_PARAM_STR:
 				o_stream_nsend_str(conn->client.output, "string");
--- a/src/doveadm/doveadm-cmd.c	Thu Feb 25 12:30:45 2016 +0200
+++ b/src/doveadm/doveadm-cmd.c	Fri Feb 26 09:33:25 2016 +0200
@@ -4,6 +4,7 @@
 #include "array.h"
 #include "istream.h"
 #include "str.h"
+#include "net.h"
 #include "doveadm-cmd.h"
 #include "doveadm.h"
 
@@ -231,6 +232,18 @@
 	return FALSE;
 }
 
+bool doveadm_cmd_param_ip(int argc, const struct doveadm_cmd_param* params, const char *name, struct ip* value)
+{
+	const struct doveadm_cmd_param* param;
+	if ((param = doveadm_cmd_param_get(argc, params, name))==NULL) return FALSE;
+
+	if (param->type == CMD_PARAM_IP) {
+		memcpy(value, &param->value.v_ip, sizeof(struct ip_addr));
+		return TRUE;
+	}
+	return FALSE;
+}
+
 bool doveadm_cmd_param_array(int argc, const struct doveadm_cmd_param* params, const char *name, ARRAY_TYPE(const_string)** value)
 {
 	const struct doveadm_cmd_param* param;
@@ -350,6 +363,11 @@
 			param->value_set = FALSE;
 		}
 		break;
+	case CMD_PARAM_IP:
+		if (net_addr2ip(value, &param->value.v_ip) != 0) {
+			param->value_set = FALSE;
+		}
+		break;
 	case CMD_PARAM_STR:
 		param->value.v_string = p_strdup(pool, value);
 		break;
--- a/src/doveadm/doveadm-cmd.h	Thu Feb 25 12:30:45 2016 +0200
+++ b/src/doveadm/doveadm-cmd.h	Fri Feb 26 09:33:25 2016 +0200
@@ -13,6 +13,7 @@
 typedef enum {
 	CMD_PARAM_BOOL = 0, /* value will contain 1 (not pointer) */
 	CMD_PARAM_INT64,    /* ditto but contains number (not pointer) */
+	CMD_PARAM_IP,	   /* value contains struct ip_addr */
 	CMD_PARAM_STR,     /* value contains const char* */
 	CMD_PARAM_ARRAY,   /* value contains const char*[] */
 	CMD_PARAM_ISTREAM  /* value contains struct istream* */
@@ -39,6 +40,7 @@
 		int64_t v_int64;
 		const char* v_string;
 		ARRAY_TYPE(const_string) v_array;
+		struct ip_addr v_ip;
 		struct istream* v_istream;
 	} value;
 	doveadm_cmd_param_flag_t flags;
@@ -117,6 +119,7 @@
 bool doveadm_cmd_param_bool(int argc, const struct doveadm_cmd_param* params, const char *name, bool* value);
 bool doveadm_cmd_param_int64(int argc, const struct doveadm_cmd_param* params, const char *name, int64_t* value);
 bool doveadm_cmd_param_str(int argc, const struct doveadm_cmd_param* params, const char *name, const char** value);
+bool doveadm_cmd_param_ip(int argc, const struct doveadm_cmd_param* params, const char *name, struct ip_addr *ip);
 bool doveadm_cmd_param_array(int argc, const struct doveadm_cmd_param* params, const char *name, ARRAY_TYPE(const_string)** value);
 bool doveadm_cmd_param_istream(int argc, const struct doveadm_cmd_param* params, const char *name, struct istream** value);