diff --git a/src/libcharon/plugins/vici/Makefile.am b/src/libcharon/plugins/vici/Makefile.am index 48e2f0cea..f152482a4 100644 --- a/src/libcharon/plugins/vici/Makefile.am +++ b/src/libcharon/plugins/vici/Makefile.am @@ -14,6 +14,7 @@ plugin_LTLIBRARIES = libstrongswan-vici.la endif libstrongswan_vici_la_SOURCES = \ + vici_version.c vici_version.h \ vici_socket.h vici_socket.c \ vici_message.h vici_message.c \ vici_builder.h vici_builder.c \ @@ -38,6 +39,7 @@ ipseclib_LTLIBRARIES = libvici.la libvici_la_SOURCES = \ vici_message.c vici_message.h \ vici_builder.c vici_builder.h \ + vici_version.c vici_version.h \ libvici.c libvici.h libvici_la_LIBADD = $(top_builddir)/src/libstrongswan/libstrongswan.la diff --git a/src/libcharon/plugins/vici/libvici.c b/src/libcharon/plugins/vici/libvici.c index 7c98c8b69..d8ccd482d 100644 --- a/src/libcharon/plugins/vici/libvici.c +++ b/src/libcharon/plugins/vici/libvici.c @@ -2,6 +2,9 @@ * Copyright (C) 2014 Martin Willi * Copyright (C) 2014 revosec AG * + * Copyright (C) 2015 Andreas Steffen + * HSR Hochschule fuer Technik Rapperswil + * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2 of the License, or (at your @@ -17,6 +20,7 @@ #include "vici_builder.h" #include "vici_dispatcher.h" #include "vici_socket.h" +#include "vici_version.h" #include #include @@ -329,6 +333,11 @@ void vici_add_key_valuef(vici_req_t *req, char *key, char *fmt, ...) va_end(args); } +void vici_add_version(vici_req_t *req, vici_version_t version) +{ + vici_add_key_valuef(req, "vici", "%N", vici_version_names, version); +} + void vici_begin_list(vici_req_t *req, char *name) { req->b->add(req->b, VICI_LIST_START, name); diff --git a/src/libcharon/plugins/vici/libvici.h b/src/libcharon/plugins/vici/libvici.h index 3ca9de424..57058e292 100644 --- a/src/libcharon/plugins/vici/libvici.h +++ b/src/libcharon/plugins/vici/libvici.h @@ -2,6 +2,9 @@ * Copyright (C) 2014 Martin Willi * Copyright (C) 2014 revosec AG * + * Copyright (C) 2015 Andreas Steffen + * HSR Hochschule fuer Technik Rapperswil + * libvici.h is MIT-licensed to simplify reuse, but please note that libvici.c * is not, as it depends on the GPLv2 licensed libstrongswan. * @@ -86,6 +89,21 @@ #include +/** + * Vici versions + */ +typedef enum { + /** default version if vici key/value pair is missing in message */ + VICI_1_0, + /** current version, vici key/value pair is explicitly sent in message */ + VICI_2_0, +} vici_version_t; + +/** + * Current vici version + */ +#define VICI_VERSION VICI_2_0 + /** * Opaque vici connection contex. */ @@ -219,6 +237,14 @@ void vici_add_key_value(vici_req_t *req, char *key, void *buf, int len); */ void vici_add_key_valuef(vici_req_t *req, char *key, char *fmt, ...); +/** + * Add a vici version key/value pair (not not needed for VICI 1.0) + * + * @param req request message to add vici version key/value pair to + * @param version vici version + */ +void vici_add_version(vici_req_t *req, vici_version_t version); + /** * Begin a list in a request message. * diff --git a/src/libcharon/plugins/vici/vici_version.c b/src/libcharon/plugins/vici/vici_version.c new file mode 100644 index 000000000..70d52bf3f --- /dev/null +++ b/src/libcharon/plugins/vici/vici_version.c @@ -0,0 +1,21 @@ +/* + * Copyright (C) 2015 Andreas Steffen + * HSR Hochschule fuer Technik Rapperswil + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. See . + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +#include "vici_version.h" + +ENUM(vici_version_names, VICI_1_0, VICI_2_0, + "1.0", + "2.0" +); diff --git a/src/libcharon/plugins/vici/vici_version.h b/src/libcharon/plugins/vici/vici_version.h new file mode 100644 index 000000000..53e13dc95 --- /dev/null +++ b/src/libcharon/plugins/vici/vici_version.h @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2015 Andreas Steffen + * HSR Hochschule fuer Technik Rapperswil + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. See . + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +/** + * @defgroup vici_version vici_version + * @{ @ingroup vici + */ + +#ifndef VICI_VERSION_H_ +#define VICI_VERSION_H_ + +#include "libvici.h" + +#include + +extern enum_name_t *vici_version_names; + +#endif /** VICI_VERSION_H_ @}*/