vici: Add convenience value/string/integer getter to libvici
authorMartin Willi <martin@revosec.ch>
Tue, 11 Feb 2014 13:09:14 +0000 (14:09 +0100)
committerMartin Willi <martin@revosec.ch>
Wed, 7 May 2014 12:13:35 +0000 (14:13 +0200)
src/libcharon/plugins/vici/libvici.c
src/libcharon/plugins/vici/libvici.h

index 0776b6b..f184a3b 100644 (file)
@@ -574,6 +574,43 @@ char* vici_parse_value_str(vici_res_t *res)
        }
 }
 
+void* vici_find(vici_res_t *res, int *len, char *fmt, ...)
+{
+       va_list args;
+       chunk_t value;
+
+       va_start(args, fmt);
+       value = res->message->vget_value(res->message, chunk_empty, fmt, args);
+       va_end(args);
+
+       *len = value.len;
+       return value.ptr;
+}
+
+char* vici_find_str(vici_res_t *res, char *def, char *fmt, ...)
+{
+       va_list args;
+       char *str;
+
+       va_start(args, fmt);
+       str = res->message->vget_str(res->message, def, fmt, args);
+       va_end(args);
+
+       return str;
+}
+
+int vici_find_int(vici_res_t *res, int def, char *fmt, ...)
+{
+       va_list args;
+       int val;
+
+       va_start(args, fmt);
+       val = res->message->vget_int(res->message, def, fmt, args);
+       va_end(args);
+
+       return val;
+}
+
 void vici_free_res(vici_res_t *res)
 {
        res->strings->destroy_function(res->strings, free);
index 329c67c..fed3565 100644 (file)
@@ -308,6 +308,45 @@ void* vici_parse_value(vici_res_t *res, int *len);
 char* vici_parse_value_str(vici_res_t *res);
 
 /**
+ * Find a blob value in a message for a given key.
+ *
+ * Sections can be selected by prefixing them separated by dots.
+ *
+ * @param res          response message to parse
+ * @param len          length of returned object
+ * @param fmt          printf format string of key and sections
+ * @param ...          arguments to format string
+ * @return                     blob value, having *len bytes, NULL if not found
+ */
+void *vici_find(vici_res_t *res, int *len, char *fmt, ...);
+
+/**
+ * Find a string value in a message for a given key.
+ *
+ * Sections can be selected by prefixing them separated by dots.
+ *
+ * @param res          response message to parse
+ * @param def          default value, if key not found
+ * @param fmt          printf format string of key and sections
+ * @param ...          arguments to format string
+ * @return                     string, def if not found
+ */
+char* vici_find_str(vici_res_t *res, char *def, char *fmt, ...);
+
+/**
+ * Find an integer value in a message for a given key.
+ *
+ * Sections can be selected by prefixing them separated by dots.
+ *
+ * @param res          response message to parse
+ * @param def          default value, if key not found
+ * @param fmt          printf format string of key and sections
+ * @param ...          arguments to format string
+ * @return                     integer value, def if not found
+ */
+int vici_find_int(vici_res_t *res, int def, char *fmt, ...);
+
+/**
  * Clean up a received response message.
  *
  * Event messages get cleaned up by the library, it is not allowed to call