From: Martin Willi Date: Thu, 20 Feb 2014 10:29:35 +0000 (+0100) Subject: vici: Add Windows support X-Git-Tag: 5.2.0dr6~24^2~9 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dfb23fa159695ce53f84e243802b4f56f40176dd;p=thirdparty%2Fstrongswan.git vici: Add Windows support --- diff --git a/src/libcharon/plugins/vici/libvici.c b/src/libcharon/plugins/vici/libvici.c index 6e3b85a720..d1dadddcbf 100644 --- a/src/libcharon/plugins/vici/libvici.c +++ b/src/libcharon/plugins/vici/libvici.c @@ -43,7 +43,7 @@ typedef struct { typedef enum { WAIT_IDLE = 0, WAIT_SUCCESS, - WAIT_FAILED, + WAIT_FAILURE, WAIT_READ_ERROR, } wait_state_t; @@ -242,7 +242,7 @@ CALLBACK(on_read, bool, return wait_result(conn, WAIT_SUCCESS); case VICI_CMD_UNKNOWN: case VICI_EVENT_UNKNOWN: - return wait_result(conn, WAIT_FAILED); + return wait_result(conn, WAIT_FAILURE); case VICI_CMD_REQUEST: case VICI_EVENT_REGISTER: case VICI_EVENT_UNREGISTER: @@ -403,7 +403,7 @@ vici_res_t* vici_submit(vici_req_t *req, vici_conn_t *conn) case WAIT_READ_ERROR: errno = conn->error; break; - case WAIT_FAILED: + case WAIT_FAILURE: default: errno = ENOENT; break; @@ -712,7 +712,7 @@ int vici_register(vici_conn_t *conn, char *name, vici_event_cb_t cb, void *user) case WAIT_READ_ERROR: errno = conn->error; break; - case WAIT_FAILED: + case WAIT_FAILURE: default: errno = ENOENT; break; diff --git a/src/libcharon/plugins/vici/suites/test_event.c b/src/libcharon/plugins/vici/suites/test_event.c index 12fd031077..b923ad393c 100644 --- a/src/libcharon/plugins/vici/suites/test_event.c +++ b/src/libcharon/plugins/vici/suites/test_event.c @@ -20,7 +20,11 @@ #include -#define URI "unix:///tmp/strongswan-vici-event-test" +#ifdef WIN32 +# define URI "tcp://127.0.0.1:6543" +#else /* !WIN32 */ +# define URI "unix:///tmp/strongswan-vici-event-test" +#endif /* !WIN32 */ static void event_cb(void *user, char *name, vici_res_t *ev) { diff --git a/src/libcharon/plugins/vici/suites/test_request.c b/src/libcharon/plugins/vici/suites/test_request.c index 8cb11a7ea5..8eeb37bc96 100644 --- a/src/libcharon/plugins/vici/suites/test_request.c +++ b/src/libcharon/plugins/vici/suites/test_request.c @@ -20,7 +20,11 @@ #include -#define URI "unix:///tmp/strongswan-vici-request-test" +#ifdef WIN32 +# define URI "tcp://127.0.0.1:6543" +#else /* !WIN32 */ +# define URI "unix:///tmp/strongswan-vici-request-test" +#endif /* !WIN32 */ static void encode_section(vici_req_t *req) { diff --git a/src/libcharon/plugins/vici/suites/test_socket.c b/src/libcharon/plugins/vici/suites/test_socket.c index 032445bb08..8d545c6c19 100644 --- a/src/libcharon/plugins/vici/suites/test_socket.c +++ b/src/libcharon/plugins/vici/suites/test_socket.c @@ -61,11 +61,13 @@ static struct { { "tcp://127.0.0.1:6543", 2 }, { "tcp://127.0.0.1:6543", 3 }, { "tcp://127.0.0.1:6543", 7 }, +#ifndef WIN32 { "unix:///tmp/strongswan-tests-vici-socket", ~0 }, { "unix:///tmp/strongswan-tests-vici-socket", 1 }, { "unix:///tmp/strongswan-tests-vici-socket", 2 }, { "unix:///tmp/strongswan-tests-vici-socket", 3 }, { "unix:///tmp/strongswan-tests-vici-socket", 7 }, +#endif /* !WIN32 */ }; START_TEST(test_echo) diff --git a/src/libcharon/plugins/vici/vici_config.c b/src/libcharon/plugins/vici/vici_config.c index 3f2fec4447..2319bddafb 100644 --- a/src/libcharon/plugins/vici/vici_config.c +++ b/src/libcharon/plugins/vici/vici_config.c @@ -24,7 +24,6 @@ #include #include -#include /** * Magic value for an undefined lifetime diff --git a/src/libcharon/plugins/vici/vici_dispatcher.h b/src/libcharon/plugins/vici/vici_dispatcher.h index effe5a6704..2297a80bd2 100644 --- a/src/libcharon/plugins/vici/vici_dispatcher.h +++ b/src/libcharon/plugins/vici/vici_dispatcher.h @@ -29,7 +29,11 @@ typedef enum vici_operation_t vici_operation_t; /** * Default socket URI of vici service */ -#define VICI_DEFAULT_URI "unix://" IPSEC_PIDDIR "/charon.vici" +#ifdef WIN32 +# define VICI_DEFAULT_URI "tcp://127.0.0.1:4502" +#else +# define VICI_DEFAULT_URI "unix://" IPSEC_PIDDIR "/charon.vici" +#endif /** * Kind of vici operation diff --git a/src/libcharon/plugins/vici/vici_query.c b/src/libcharon/plugins/vici/vici_query.c index 9a8e9a4d64..e7c48f4aa0 100644 --- a/src/libcharon/plugins/vici/vici_query.c +++ b/src/libcharon/plugins/vici/vici_query.c @@ -17,7 +17,9 @@ #include "vici_builder.h" #include +#ifndef WIN32 #include +#endif #include @@ -786,7 +788,6 @@ CALLBACK(list_certs, vici_message_t*, CALLBACK(version, vici_message_t*, private_vici_query_t *this, char *name, u_int id, vici_message_t *request) { - struct utsname utsname; vici_builder_t *b; b = vici_builder_create(); @@ -794,13 +795,40 @@ CALLBACK(version, vici_message_t*, b->add_kv(b, "daemon", "%s", lib->ns); b->add_kv(b, "version", "%s", VERSION); - if (uname(&utsname) == 0) +#ifdef WIN32 { - b->add_kv(b, "sysname", "%s", utsname.sysname); - b->add_kv(b, "release", "%s", utsname.release); - b->add_kv(b, "machine", "%s", utsname.machine); + OSVERSIONINFOEX osvie; + + memset(&osvie, 0, sizeof(osvie)); + osvie.dwOSVersionInfoSize = sizeof(osvie); + + if (GetVersionEx((LPOSVERSIONINFO)&osvie)) + { + b->add_kv(b, "sysname", "Windows %s", + osvie.wProductType == VER_NT_WORKSTATION ? "Client" : "Server"); + b->add_kv(b, "release", "%d.%d.%d (SP %d.%d)", + osvie.dwMajorVersion, osvie.dwMinorVersion, osvie.dwBuildNumber, + osvie.wServicePackMajor, osvie.wServicePackMinor); + b->add_kv(b, "machine", "%s", +#ifdef WIN64 + "x86_64"); +#else + "x86"); +#endif /* !WIN64 */ + } } +#else /* !WIN32 */ + { + struct utsname utsname; + if (uname(&utsname) == 0) + { + b->add_kv(b, "sysname", "%s", utsname.sysname); + b->add_kv(b, "release", "%s", utsname.release); + b->add_kv(b, "machine", "%s", utsname.machine); + } + } +#endif /* !WIN32 */ return b->finalize(b); }