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:
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");
#include "array.h"
#include "istream.h"
#include "str.h"
+#include "net.h"
#include "doveadm-cmd.h"
#include "doveadm.h"
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, ¶m->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;
param->value_set = FALSE;
}
break;
+ case CMD_PARAM_IP:
+ if (net_addr2ip(value, ¶m->value.v_ip) != 0) {
+ param->value_set = FALSE;
+ }
+ break;
case CMD_PARAM_STR:
param->value.v_string = p_strdup(pool, value);
break;
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* */
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;
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);